2012-02-25 53 views
2

如何回滚其与下面的代码如何删除window.find的背景色亮点

if (window.find && window.getSelection) { 
    var sel = window.getSelection(); 
    sel.collapse(document.body, 0); 
    document.body.offsetHeight; 
    if (window.find(text, true)) { 
     document.execCommand("hiliteColor", false, "YellowGreen"); 
     sel.collapseToEnd(); 
    } 
} 

如何删除所有亮点背景色,即“黄绿”造成的亮点。我看过一个与我的问题相关的post。但接受的答案是行不通的。请有人看着它,帮助我。

+0

你针对一个特定的浏览器? Firefox可能? – Hemlock 2012-02-25 19:58:03

+0

@Hemlock我只针对Chrome。 – Exception 2012-02-25 20:00:06

+0

@Tim Down请帮助我。 – Exception 2012-02-25 21:36:28

回答

0

我发现这个替代....

$('body *').each(function() { 
    ($(this).css('background-color') == "rgb(70, 130, 180)") || ($(this).css('background-color') == "rgb(255, 192, 203)") ? $(this).css("background-color", "") : 0; 
}); 
1

我有一个解决方案。在你的问题中没有足够的细节能够写出可以放入的东西,所以你可能需要调整它以得到你想要的东西。

这个想法是在突出显示代码正在运行时监视DOMNodeInserted突变事件,并用className标记插入的节点,然后可以使用它们查找并删除它们。 警告:突变事件已被弃用,但确实没有替代品,所以我正在使用我所拥有的。

Highlighter = (function() { 
    var highlighting = false; 
    document.addEventListener('DOMNodeInserted', function(e) { 
     if (highlighting) { 
      var target = e.target; 
      if (target.nodeType == 1) { 
       target.className = CLASS_NAME; 
      } 
     } 
    }, false); 

    var CLASS_NAME = 'highlighted'; 
    return { 
     highlight: function(text, color) { 
      highlighting = true;    
      var sel = window.getSelection(); 
      sel.collapse(document.body, 0); 

      if (window.find(text, true)) { 
       document.execCommand("hiliteColor", false, color); 
       sel.collapseToEnd(); 
      } 
      highlighting = false; 
     }, 

     unhighlight: function() { 
      var highlighted = document.querySelectorAll('.' + CLASS_NAME); 
      var i = highlighted.length; 
      while (i--) { 
       var node = highlighted[i]; 
       node.parentNode.replaceChild(node.firstChild, node); 
      } 
     } 
    } 
})(); 

仅适用于Chrome 17在这里测试工作的是一个小提琴:http://jsfiddle.net/LPJqW/