javascript - 如何访问innerHTML但忽略<script>标签

标签 javascript html

我有一个插件可以查看 HTML 并替换文本。然而,根据我当前的实现,脚本标签中的文本也会被搜索到。这会导致受影响页面上的脚本损坏。

var pageText = document.body.innerHTML;
document.body.innerHTML = pageText.replace(regextgoeshere);

我尽力通过正则表达式模式过滤掉它,但我需要弄清楚如何跳过所有标签。

获取innerHTML时有没有办法跳过所有标签?

最佳答案

也许你最好的选择是使用 querySelectorAll并否定不需要的元素。然后将textContent 替换为innerHTML。通过使用innerHTML,您可能会面临破坏文档标签的风险。

这是一个跨浏览器解决方案。

var matches = document.querySelectorAll("*:not(html):not(head):not(script):not(meta):not(link)");
console.log(matches);
[].forEach.call(matches, function(elem) {
  var text = ('innerText' in elem) ? 'innerText' : 'textContent';
  elem[text] = elem[text].replace("this", "works");
});

http://jsfiddle.net/m6qhuesv/

注释 1:HTML、HEAD、META 和 LINK 标记不允许修改 textContext。

注释 2:innerText 是 IE 专有的东西(也适用于 Chrome)。 W3C 定义 textContent作为官方属性(property)。

关于javascript - 如何访问innerHTML但忽略<script>标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26199593/

相关文章:

javascript - 如何在父组件中单击按钮时控制该子组件的状态?

javascript - 如何使事件页面在右侧有边框?

javascript - 如何使表格 <td> 和 <tr> 全宽?

javascript - 使用javascript收集html中的前3段

java - 如何使用 ajax 设置 wicket listview 面板更新的 anchor

javascript - 使用 Jquery 剥离 HTML 标签

javascript - 如何在 b.js 的按钮中使用 a.js 中的函数?

javascript - 如何迭代数组值的字典来渲染组件? ReactJS

javascript - 有没有办法让一个函数停止所有其他函数?

javascript - 定义 D3 插件 sankey.js 和 html 代码之间的源