2 回答

TA貢獻(xiàn)1765條經(jīng)驗(yàn) 獲得超5個(gè)贊
為了在您選擇“粗體”時(shí)使文本變?yōu)榇煮w,請(qǐng)從當(dāng)前選擇中獲取范圍并在其中插入元素“強(qiáng)”。
let range=window.getSelection.getRangeAt(0);
let elem=document.createElement('strong');
elem.innerHTML='​'
range.insertNode(elem);
這將使文本變?yōu)榇煮w,同樣適用于斜體選項(xiàng)?,F(xiàn)在問題來了,當(dāng)您需要禁用它時(shí),我必須清除當(dāng)前選擇范圍并將范圍設(shè)置為“div”的末尾并插入新元素“span”(我將 span 用于普通文本)。
同樣,我也處理了以下情況
當(dāng)粗體和斜體同時(shí)按下時(shí)(在這種情況下,您需要存儲(chǔ)先前的元素)
當(dāng)按下回車時(shí)(div被創(chuàng)建并產(chǎn)生問題,所以我不得不設(shè)置keydown監(jiān)聽器并使用document.execCommand不創(chuàng)建div而是創(chuàng)建br)
如果有人有興趣更新我的解決方案以使其有效,歡迎您
var boldButton=document.querySelector('#boldBtn'),
italicButton=document.querySelector('#italicBtn'),
contentDiv=document.querySelector('#content'),
bold=false,italic=false,range,prevElement,selection;
;
contentDiv.addEventListener('keydown',function(e){
if (e.keyCode === 13) {
window.document.execCommand('insertLineBreak', false, null);
range=window.getSelection().getRangeAt(0);
range.collapse();
prevElement=undefined;
if(bold) addElement('strong');
if(italic) addElement('i');
e.preventDefault();
return false;
}
return true;
});
boldButton.addEventListener('click',function(){
debugger
bold=!bold;
boldButton.classList.toggle('border-black');
if(!bold)
disable('bold');
else
addElement('strong');
});
italicButton.addEventListener('click',function(){
debugger;
italic=!italic;
italicButton.classList.toggle('border-black');
if(!italic)
disable('italic');
else
addElement('i');
});
function addElement(element){
if(!selection)selection=window.getSelection()
range=selection.getRangeAt(0);
let elem=document.createElement(element);
elem.innerHTML='​'
if(prevElement)
range.selectNodeContents(prevElement);
range.collapse();
range.insertNode(elem);
elem.focus();
prevElement=elem;
}
function disable(elem){
if(italic && bold) return;
setRangeAtEnd();
let element=document.createElement('span');
if(italic)
element=document.createElement('i');
else if(bold)
element=document.createElement('strong');
element.innerHTML='​'
range.insertNode(element);
range.setStart(element,1);
element.focus();
}
function setRangeAtEnd(){
let childNodes=contentDiv.childNodes;
range=document.createRange();
range.setStartAfter(childNodes[childNodes.length-1]);
prevElement=undefined;
if(!selection)selection=window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
}
#content{
border:1px solid black;
height:150px;
}
.border-black{
border:2px dotted black;
}
<div id="content" contenteditable="true"></div><br>
<button id="boldBtn" class="font-style">Bold</button>
<button id="italicBtn" class="font-style">Italic</button>

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超2個(gè)贊
是的,有辦法解決這個(gè)問題,因?yàn)槟梢允褂?jquery
<script>
$(document).ready(function () {
$("#boldBtn").click( function() {
$("your input id or class").keyup(function () {
$("your input id or class").css("fontWeight", "bold");
});
});
});
</script>
如果your input id or class你有課,那么把它寫成.classname或者如果你有一個(gè) id write is as #id。
希望這可以幫助你。
添加回答
舉報(bào)