Javascript 寻找每一个;“字符串”;在一页上,并将其替换为另一页
我正在为网页上的查找和替换chrome扩展,以下是我到目前为止的查找和替换代码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
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)