我正在开发Chrome扩展程序。我在这里有这个功能:
function makeEditableAndHighlight(colour) {
var range, sel = window.getSelection();
if (sel.rangeCount && sel.getRangeAt) {
range = sel.getRangeAt(0);
}
document.designMode = "on";
if (range) {
sel.removeAllRanges();
sel.addRange(range);
}
// Use HiliteColor since some browsers apply BackColor to the whole block
if (!document.execCommand("HiliteColor", false, colour)) {
document.execCommand("BackColor", false, colour);
}
document.designMode = "off";
}
function highlight(colour) {
var range, sel;
if (window.getSelection) {
// IE9 and non-IE
try {
if (!document.execCommand("BackColor", false, colour)) {
makeEditableAndHighlight(colour);
}
} catch (ex) {
makeEditableAndHighlight(colour)
}
} else if (document.selection && document.selection.createRange) {
// IE <= 8 case
range = document.selection.createRange();
range.execCommand("BackColor", false, colour);
}
}
我用它来突出显示(背景颜色为黄色)一段选定的文本。问题在于去除突出显示。
我这样做了:
function body() {
document.getElementsByTagName("body")[0].addEventListener(
"click",
function(event){
highlight('transparent');
}
);
}
问题是:
1)它需要仍然选择文本,但是单击取消选择它,所以只有当您重新选择完全相同的文本并且实际上单击ON IT时它才有效。
2)它似乎使页面运行得慢得多,甚至有时会锁定它。
我喜欢做的是:
当我在任何地方单击时,文本将被去突出显示并取消选择(基本上,只要取消选中文本,就会将高亮设置为透明或之前的任何内容)。
做什么?
P.S - 仅限Javascript。如果您有使用jQuery的方法,请告诉我,但请记住,我必须在提交Chrome扩展程序的content.js中使用它。
答案 0 :(得分:0)
使用可以使用以下代码来取消突出显示。这样可以正常工作。 :)
document.designMode = 'on';
document.execCommand("undo", false, 'span');
document.designMode = 'off';
这里&#34; span&#34;是由。创建的元素。
document.execCommand("HiliteColor", false, colour)