2 回答
TA贡献1818条经验 获得超3个赞
为了在选择“粗体”时使文本变为粗体,请从当前选择范围中获取范围并在其中插入元素“strong”。
let range=window.getSelection.getRangeAt(0);
let elem=document.createElement('strong');
elem.innerHTML='​'
range.insertNode(elem);
这将使文本变为粗体,同样也适用于斜体选项。现在,当您需要禁用它时,问题就出现了,因为我必须清除选择中的当前范围,并将范围设置为“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 关注
- 97 浏览
添加回答
举报