使用Javascript来回改变背景颜色?

时间:2013-08-06 03:18:05

标签: javascript html dom google-chrome-extension

我正在开发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中使用它。

1 个答案:

答案 0 :(得分:0)

使用可以使用以下代码来取消突出显示。这样可以正常工作。 :)

document.designMode = 'on';
document.execCommand("undo", false, 'span');
document.designMode = 'off';

这里&#34; span&#34;是由。创建的元素。

document.execCommand("HiliteColor", false, colour)