【发布时间】:2015-04-13 19:30:48
【问题描述】:
背景
基于today's 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 文档中的所有节点,替换其直接子文本值中的单词,同时保留其剩余内容?
【问题讨论】:
-
我承认这只是为了好玩;不是一个严肃的工作问题 - 但它很有趣,是学习/改进我的 javascript 的好机会。提前感谢您的任何想法。
-
是的,有办法。你想要做的只是遍历text nodes。
标签: javascript html innerhtml innertext