【发布时间】:2014-11-16 08:51:51
【问题描述】:
我正在为网页上的查找和替换 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;
}
}
}
唯一的问题是它不会替换每个位置的每个“e”。在链接和内部的 div 和 span 标签等地方有 e 的剩余部分。我感觉我没有正确循环遍历所有元素,我没有检测到正确的字符串,并且我没有正确替换找到的字符串。我该如何解决这个问题?
编辑:好的,现在,这是当前代码。它在大多数情况下都有效,唯一的问题是它不能在整个页面上都有效。您可以打开 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 宝贵代码留在新的代码中,没有它,它应该可以工作。
【问题讨论】:
-
有点,但我不使用 jQuery。
-
我认为你必须得到整个页面的来源:stackoverflow.com/questions/866073/get-entire-content-of-page,然后你需要像你已经做的那样使用
.replace。 -
你访问
nodes[i].childNodes,但是文本节点没有子节点
标签: javascript html replace find