如何用javascript替换单词?

时间:2011-06-29 02:10:16

标签: javascript replace

在我加入的某个论坛中,他们只是用垃圾邮件或删除的内容替换某些链接。例如:www.rapidshare.com/download/123将自动转到www.spam.com/download/123或者单词MONEY将变为BOSS。

我真的很烦我,因为如果我想下载,我必须手动重命名。是否有任何Javascript可以解决这个问题,将www.spam.com替换回www.rapidshare.com?我的意思是在客户端。

由于

2 个答案:

答案 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');

如果您对代码的工作原理感到好奇,这里有一个简短的解释......

  1. 获取element的所有子节点。这将获得文本节点和元素。
  2. 迭代所有这些。
  3. 如果此节点具有自己的子节点,请使用element作为循环中的element再次调用该函数。 continue因为我们无法修改它,因为它不是文本节点。
  4. 如果此节点的nodeType属性不是3(即文本节点),则再次continue我们无法修改任何文字。
  5. 我们相信这是一个文本节点,所以请替换文字。
  6. 通过将search直接传递给它,可以使此功能更灵活,允许它使用字符串或正则表达式搜索文本。

答案 1 :(得分:0)

var a = document.getElementsByTagName('a');
for (var i = 0, len = a.length ; i < len ; i += 1) {
    a.firstChild.nodeValue = a.href;
}