如果这些网址在
href
属性中...
var replaceHrefAttributes = function (element, search, replace) {
var nodes = element.getElementsByTagName('a');
for (var i = 0, length = nodes.length; i < length; i++) {
var node = nodes[i];
if (node.href == undefined) {
continue;
}
node.href = node.href.replace(new RegExp(search, 'g'), replace);
}
}
您的使用可能类似于...
replaceHrefAttributes(document.body, 'www.spam.com', 'www.rapidshare.com');
如果这些URL是内联文本...
您可以迭代所有文本节点,使用replace()
将任何字符串替换为另一个。
这是我编写的通用递归函数,可执行此操作...
var replaceText = function replaceText(element, search, replace) {
var nodes = element.childNodes;
for (var i = 0, length = nodes.length; i < length; i++) {
var node = nodes[i];
if (node.childNodes.length) {
replaceText(node, search, replace);
continue;
}
if (node.nodeType != 3) {
continue;
}
node.data = node.data.replace(new RegExp(search, 'g'), replace);
}
}
您的使用方式可能如下所示...
replaceText(document.body, 'www.spam.com', 'www.rapidshare.com');
如果您对代码的工作原理感到好奇,这里有一个简要的解释...
- 获取
element
的所有子节点。这将获取文本节点和元素。
- 遍历它们。
- 如果此节点具有自己的子节点,则使用循环中的
element
作为element
再次调用该函数。continue
因为我们不能修改它,因为它不是文本节点。
- 如果此节点的
nodeType
属性不是3
(即文本节点),则continue
,因为我们不能修改任何文本。
- 我们现在确定这是一个文本节点,所以替换文本。
您可以通过直接将search
传递给它来使此函数更加灵活,从而允许它使用字符串或正则表达式搜索文本。
hrefs
。;o)(无论如何都很确定。) - user113716if (node.href != undefined) { continue; }
,我想你是想写成== undefined
。但我现在有点困了... - user113716