我有一个插件可以查看 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");
});
注释 1:HTML、HEAD、META 和 LINK 标记不允许修改 textContext。
注释 2:innerText 是 IE 专有的东西(也适用于 Chrome)。 W3C 定义 textContent作为官方属性(property)。
关于javascript - 如何访问innerHTML但忽略<script>标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26199593/