JavaScript execCommand("HiliteColor")可以通过添加span元素很好地实现文本高亮,但我希望能够动态取消高亮文本,方法是检查所选文本是否在已高亮的span元素中。然后还有一个问题,就是如果只有一半所选文本在span元素中怎么办。我已经尝试过手动添加span元素并尝试取消高亮,但是:
document.getElementsByClassName('highlight').remove();
alert(window.getComputedStyle(document.getElementById("pages"), null).getPropertyValue('background-color'));
alert(document.getElementById("pages").style.backgroundColor);
我想检查背景并进行高亮,或者删除高亮类,为此创建了一个函数。当点击按钮时,该函数会接收一个颜色参数。当点击删除高亮按钮时,它将发送颜色参数"transparent":
我的项目在codepen上:https://codepen.io/pokepimp007/pen/wxGKEQ
function Highlight(color) {
document.designMode = "on";
var sel = window.getSelection();
sel.removeAllRanges();
var range = document.createRange();
range.setStart(editor.startContainer, editor.startOffset);
range.setEnd(editor.endContainer, editor.endOffset);
sel.addRange(range);
if (!sel.isCollapsed) {
if (!document.execCommand("HiliteColor", false, color)) {
document.execCommand("BackColor", false, color);
}
}
sel.removeAllRanges();
document.designMode = "off";
}