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