Chrome扩展程序 - 将文本添加到Word或短语的第一个实例

时间:2013-08-08 00:40:03

标签: javascript google-chrome-extension

我正在尝试制作Chrome扩展程序,在加载时找到字符串的第一个实例并添加一些细节以及链接。

据我所知,TreeWalker是最好的方法,所以我改编了这个例子(Dom TreeWalker)。

这很好用(虽然我的实现效率很低)。但我希望效果很微妙,所以我添加了一个要求,即字符串需要出现在一个段落中,以减少替换任何菜单或标题中文本的机会。

现在行为不稳定(有些替换,有些则没有)。

我知道最后我的.replace实施不是正确的解决方案。

有什么想法吗?

var companies = [
        "Apples",        
        "Black Beans",
        "Sweet Potatoes"
    ];
var re = new RegExp(companies.join("|"), "i");

var walker = document.createTreeWalker(
  document.body,
  NodeFilter.SHOW_TEXT,
  function(node) {
    var matches = node.textContent.match(re);
    //look for matching text but also accept only those in paragraphs
    if((matches) && (node.parentNode.nodeName == "P")) {       
      return NodeFilter.FILTER_ACCEPT;

    } else {
      return NodeFilter.FILTER_SKIP;
    }
  },
  false);

var nodes = [];

while(walker.nextNode()) {
  nodes.push(walker.currentNode);
}


node=nodes[0]; //just replace the first hit within a paragraph

node.parentNode.innerHTML = node.parentNode.innerHTML.replace("Apples", "Apples [nutritional fact <a href='http://nutritionalinfo.com/apples'>Apples</a> ]");
node.parentNode.innerHTML = node.parentNode.innerHTML.replace("Black Beans", "Black Beans [nutritional fact <a href='http://nutritionalinfo.com/apples'>Apples</a> ]");
node.parentNode.innerHTML = node.parentNode.innerHTML.replace("Sweet Potatoes", "Sweet Potatoes[nutritional fact <a href='http://nutritionalinfo.com/apples'>Apples</a> ]");

0 个答案:

没有答案