在我加入的某个论坛中,他们只是用垃圾邮件或删除的内容替换某些链接。例如:www.rapidshare.com/download/123将自动转到www.spam.com/download/123或者单词MONEY将变为BOSS。
我真的很烦我,因为如果我想下载,我必须手动重命名。是否有任何Javascript可以解决这个问题,将www.spam.com替换回www.rapidshare.com?我的意思是在客户端。
由于
答案 0 :(得分:3)
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');
您可以使用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
直接传递给它,可以使此功能更灵活,允许它使用字符串或正则表达式搜索文本。
答案 1 :(得分:0)
var a = document.getElementsByTagName('a');
for (var i = 0, len = a.length ; i < len ; i += 1) {
a.firstChild.nodeValue = a.href;
}