我有一个通过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定义为官方属性。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句