2 回答

TA貢獻1818條經驗 獲得超3個贊
為了在選擇“粗體”時使文本變為粗體,請從當前選擇范圍中獲取范圍并在其中插入元素“strong”。
let range=window.getSelection.getRangeAt(0);
let elem=document.createElement('strong');
elem.innerHTML='​'
range.insertNode(elem);
這將使文本變為粗體,同樣也適用于斜體選項?,F在,當您需要禁用它時,問題就出現了,因為我必須清除選擇中的當前范圍,并將范圍設置為“div”的末尾,并插入新元素“span”(我將 span 用于普通文本)。
同樣我也處理過以下情況
當粗體和斜體按下時(在這種情況下您需要存儲以前的元素)
當按下 Enter 時( div 正在被創建并產生問題,所以我必須設置 keydown 偵聽器并使用 document.execCommand 不創建 div 而是創建 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貢獻1772條經驗 獲得超5個贊
是的,有一個解決辦法,因為你可以使用 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或如果您有 id 則寫為#id。
希望這可以幫助你。
- 2 回答
- 0 關注
- 155 瀏覽
添加回答
舉報