Javascript:如何更改屏幕上显示的每个单词?

时间:2014-04-23 22:42:10

标签: javascript

我想做一个笑话代码,通过特定的其他单词更改屏幕上的每个单词,例如: "我喜欢火车" - > "你好你好你好" 嗯,这很容易。问题是选择屏幕上的每个文本。有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:3)

递归地遍历节点并进行正则表达式替换。快速而肮脏的例子:

function replaceAllWords(newWord) {
    for (var i = 0; i < document.childNodes.length; i++) {
        checkNode(document.childNodes[i]);
    }
    function checkNode(node) {
        var nodeName = node.nodeName.toLowerCase();
        if(nodeName === 'script' || nodeName === 'style') {return;}
        if (node.nodeType === 3) {
            var text = node.nodeValue;
            var newText = text.replace(/\b\w+/g, newWord);
            node.nodeValue = newText;
        }
        if (node.childNodes.length > 0) {
            for (var j = 0; j < node.childNodes.length; j++) {
                checkNode(node.childNodes[j]);
            }
        }
    }
}

//Use like
replaceAllWords("Hello");

对innerHtml执行正则表达式将替换匹配的任何内容,包括页面上的任何块脚本。此函数检查它实际上是一个文本节点,在进行替换之前,替换只会生成1个或更多字符的单词字符(A-Za-z0-9_),因此不会替换空格或符号(即标点符号,$等等会留下来)

答案 1 :(得分:0)

你的意思是这样的吗?

var old = $('body').html();
$('body').html(old.replace('I like trains', 'hello hello'));

使用Pure JS:

var new = document.getElementsByTagName('body')[0].innerHTML.replace('I like trains','bye');
 document.getElementsByTagName('body')[0].innerHTML= new;