1

背景

基于今天的 XKCD,我创建了以下脚本:

javascript:var a=document.getElementsByTagName('body')[0].innerHTML;a=a.replace(/Program(\w\w+)*/gmi,'curse').replace(/language/gmi,'word');

如果您访问一个站点(例如http://en.wikipedia.org/wiki/Programming_language)并粘贴上面的代码(如果需要,重新添加javascript:),这将对文档的内容执行正则表达式替换,同时保留大多数格式,创造一些有趣的阅读。

但是,网站的外观会受到影响;大概是因为我正在替换innerHTML而不是仅仅替换innerText(我猜;虽然不确定)。

我不能简单地替换innerText,因为所有元素都包含他们自己的孩子的innerText;对 body 元素执行此操作将删除所有格式,并且对每个元素执行此操作会复制大量内容。

问题

有没有办法通过(最小)javascript遍历HTML文档中的所有节点,替换其直接子文本值中的单词,同时保留其剩余内容?

4

1 回答 1

1

您拥有的 Javascript 根本不会更改页面。它将正文的内容读入字符串,然后更改字符串。这不影响内容。

页面改变的原因是脚本的值是字符串的值,所以它被用作新页面的内容。由于这只是一个没有定义所有样式和脚本的 head 标签的 HTML 片段,因此您会得到一个仅包含内容的无样式页面。

如果要更改页面,应将字符串作为内容放回正文中,然后void(0);用作最后一条语句以防止创建新页面:

javascript:var a=document.getElementsByTagName('body')[0].innerHTML;a=a.replace(/Program(\w\w+)*/gmi,'curse').replace(/language/gmi,'word');document.getElementsByTagName('body')[0].innerHTML=a;void(0);
于 2015-02-12T21:35:39.567 回答