Javascript 寻找每一个;“字符串”;在一页上,并将其替换为另一页

Javascript 寻找每一个;“字符串”;在一页上,并将其替换为另一页,javascript,html,replace,find,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].child

我正在为网页上的查找和替换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;
        }
    }
}
var elements=document.getElementsByTagName(“*”);
var find=“e”;
var replace=“A”;
对于(变量i=0;i
唯一的问题是它不能替换每个位置的每个“e”。在链接中以及在内部的div和span标记中都有e的剩余。我感觉我没有正确地遍历所有元素,没有正确地检测字符串,也没有正确地替换找到的字符串。我如何解决这个问题

编辑:好的,现在,这是当前代码。它在大部分情况下都能工作,唯一的问题是它不能在整个页面上工作。您可以打开JavaScript控制台,并在

侧栏上的文字不会改变

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)
    }
}
var elements=document.getElementsByTagName(“*”);
var find=“e”;
var replace=“A”;
对于(变量i=0;i
编辑:好的,新代码现在!控制台中出现undefined,没有任何更改,我在谷歌搜索中发现了这个,它来自一个堆栈溢出问题

代码:

var find=“e”;
var replace=“A”;
函数textNodesUnder(el){
var n,a=[],walk=document.createTreeWalker(el,NodeFilter.SHOW_TEXT,null,false);
而(n=walk.nextNode())a.push(n);
返回a;
}
var nodes=textNodesUnder(document.body);
对于(变量i=0;i

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

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

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

这是带有“g”的regex版本,意思是全局(所有发生)替换。

这样我就可以摆脱循环,该循环一直重复使用replace,直到没有更多实例为止?好!!我收到错误类型错误:对象#没有方法“替换”使用元素[I]。childNodes[0]。NodeValue我必须做点什么,稍后我会回来检查这个问题。当我不在的时候,所有的帮助都将被感激!好的,谢谢,请看问题中的编辑。它几乎起作用,但不完全起作用。到目前为止,这很好:dd有点重复,但我不使用jQuery。我认为您必须获得整个页面的源代码:然后您需要使用
。替换
,就像您已经做的那样。您可以访问
节点[I]。childNodes
,但是文本节点没有子节点
  curText.replace(new RegExp(find, "g"), replace)