有没有办法只替换页面上所有元素的innerText
Is there a way to only replace the innerText of all elements on a page?
背景
基于今天的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:
),这将对文档的内容执行regex替换,同时保留大多数格式,创造一些有趣的阅读。
然而,网站的外观受到了影响;大概是因为我要替换innerHTML
而不仅仅是innerText
(我想,虽然不确定)。
我不能简单地替换innerText,因为所有元素都包含其子元素的innerText;在body元素上执行此操作将删除所有格式,在每个元素上执行该操作将复制大量内容。
问题
有没有一种方法可以通过(最小)javascript迭代HTML文档中的所有节点,替换其直接子文本值中的单词,同时保留其剩余内容?
您拥有的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);
相关文章:
- CKEditor Widget-阻止编辑可编辑元素本身
- 如何设置html元素填充的动画
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 使用clickToggle并在单击另一个元素时关闭元素
- 单击时将焦点更改为元素
- 表追加而不附加最后一个元素
- 如何在jQuery中获取元素的形式
- 我可以获得相对于被点击元素的确切点击位置吗
- 在函数中添加数组元素的数值
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- 将视口底部滚动到元素底部
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 在不使用JQuery的情况下隐藏DOM中的选定元素
- 元素.appendChild()插入IE.变通方法?(与innerText与textContent相关)
- 有没有办法只替换页面上所有元素的innerText
- 有没有办法只获取顶部元素的innerText(而忽略子元素的innrText)
- document.getElementById(元素).innerText=变量
- 使用innerText查找元素
- 如何忽略子元素的innerText