查找页面上的每个“字符串”并将其替换为另一个

时间:2014-09-22 11:39:18

标签: javascript html replace find

我正在为网页制作查找和替换Chrome扩展程序,这是我目前为止查找和替换的代码;

var elements = document.getElementsByTagName("*");
var find = "e";
var replace = "A";

for (var i = 0; i < elements.length; ++i) {
    if (elements[i].childNodes[0] !== undefined && elements[i].childNodes[0].nodeType === 3) {
        for (curText = elements[i].childNodes[0].nodeValue; curText !== curText.replace(find, replace); curText = curText.replace(find, replace)) {
            elements[i].childNodes[0].nodeValue = curText;
        }
    }
}

唯一的问题是它不会取代每一个&#34; e&#34;在每个地方。在链接和内部的div和span标签等地方都有ef的剩余部分。我感觉我没有正确地遍历所有元素,我没有检测到正确的字符串,并且我没有正确地替换找到的字符串。我怎么能解决这个问题?

编辑:好的,现在,这是当前的代码。它在很大程度上起作用,唯一的问题是它不能在整个页面上工作。您可以打开JavaScript控制台并在

处尝试

http://www.roblox.com/games/?SortFilter=default&TimeFilter=0&GenreFilter=1

侧栏上的文字无法更改。

var elements = document.getElementsByTagName("*");
var find = "e";
var replace = "A";

for (var i = 0; i < elements.length; ++i) {
    if (elements[i].childNodes[0] !== undefined && elements[i].childNodes[0].nodeType === 3) {
          elements[i].childNodes[0].nodeValue = elements[i].childNodes[0].nodeValue.replace(new RegExp(find, "g"), replace)
    }
}
编辑:好的,现在新代码! undefined出现在控制台中,没有任何改变,我在谷歌搜索中找到了这个,它来自堆栈溢出问题。 Find all text nodes in HTML page

代码:

var find = "e";
var replace = "A";

function textNodesUnder(el){
  var n, a=[], walk=document.createTreeWalker(el,NodeFilter.SHOW_TEXT,null,false);
  while(n=walk.nextNode()) a.push(n);
  return a;
}

var nodes = textNodesUnder(document.body);
for (var i = 0; i < elements.length; ++i) {
    if (nodes[i].childNodes[0] !== undefined && elements[i].childNodes[0].nodeType === 3) {
          nodes[i].childNodes[0].nodeValue = nodes[i].childNodes[0].nodeValue.replace(new RegExp(find, "g"), replace)
    }
}

我还没有测试,但似乎我犯了一个很大的错误,就是把我的childNodes宝贵代码留在新的代码中,没有它,它应该可以工作。

1 个答案:

答案 0 :(得分:2)

String.replace仅替换第一个实例。试试这个:

  curText.replace(new RegExp(find, "g"), replace)

这是带有“g”的正则表达式版本,意思是全局(所有出现)替换。