我正在为网页制作查找和替换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宝贵代码留在新的代码中,没有它,它应该可以工作。
答案 0 :(得分:2)
String.replace仅替换第一个实例。试试这个:
curText.replace(new RegExp(find, "g"), replace)
这是带有“g”的正则表达式版本,意思是全局(所有出现)替换。