2012-02-25 77 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/