2016-11-17 120 views
-1

我有以下的Java userscript:突出確切的文本匹配

function highlightWord(word) { 
var xpath = "//text()[contains(., '" + word + "')]"; 
var texts = document.evaluate(xpath, document.body, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); 
for (n = 0; n < texts.snapshotLength; n++) { 
    var textNode = texts.snapshotItem(n); 
    var p = textNode.parentNode; 
    var a = []; 
    var frag = document.createDocumentFragment(); 
    textNode.nodeValue.split(word).forEach(function(text, i) { 
     var node; 
     if (i) { 
      node = document.createElement('span'); 
      node.style.backgroundColor = 'lightgreen'; 
      node.appendChild(document.createTextNode(word)); 
      frag.appendChild(node); 
     } 
     if (text.length) { 
      frag.appendChild(document.createTextNode(text)); 
     } 
     return a; 
    }); 
    p.replaceChild(frag, textNode); 
    } 
} 
highlightWord('office'); 

會有人能夠幫助我找到一個解決方案,只匹配的highlightWord的,我添加了確切的文本?例如,我希望它只匹配「辦公室」而不是「官員」。

謝謝!

回答

0

你需要改變你的代碼

textNode.nodeValue.split(word).forEach(function(text, i) { 

下面的一行到下圖所示。這隻會突出顯示您提到的單詞。

textNode.nodeValue.split(RegExp("\\b" + word + "\\b")).forEach(function (text, i) { 

XPath只是提取整個文本,您的代碼中的實際字符串搜索發生在上述語句中。