使用 TreeWalker 检索非 Javascript 文本节点
Using a TreeWalker to retrieve non-Javascript text nodes
This question 教如何获取文档中的所有 TextNode,这也让我获取了 Javascript 文本。过滤掉所有 Javascript 代码节点的最佳方法是什么?
<script>
标签内的文本只有一个共同点:它们的父元素是 <script>
元素。
if (node.parentNode.nodeName !== 'SCRIPT')
另一种方法是使用过滤器:
var rejectScriptTextFilter = {
acceptNode: function(node) {
if (node.parentNode.nodeName !== 'SCRIPT') {
return NodeFilter.FILTER_ACCEPT;
}
}
};
var walker = document.createTreeWalker(
document.body,
NodeFilter.SHOW_TEXT,
rejectScriptTextFilter,
false
);
var node;
var textNodes = [];
while(node = walker.nextNode()) {
textNodes.push(node.nodeValue);
}
console.log(textNodes);
<script> var str = "script here"; </script>
<p> text here </p>
您可以克隆原始 document
,删除克隆 document
处的 <script>
个元素,然后迭代克隆 document
的剩余节点
This question 教如何获取文档中的所有 TextNode,这也让我获取了 Javascript 文本。过滤掉所有 Javascript 代码节点的最佳方法是什么?
<script>
标签内的文本只有一个共同点:它们的父元素是 <script>
元素。
if (node.parentNode.nodeName !== 'SCRIPT')
另一种方法是使用过滤器:
var rejectScriptTextFilter = {
acceptNode: function(node) {
if (node.parentNode.nodeName !== 'SCRIPT') {
return NodeFilter.FILTER_ACCEPT;
}
}
};
var walker = document.createTreeWalker(
document.body,
NodeFilter.SHOW_TEXT,
rejectScriptTextFilter,
false
);
var node;
var textNodes = [];
while(node = walker.nextNode()) {
textNodes.push(node.nodeValue);
}
console.log(textNodes);
<script> var str = "script here"; </script>
<p> text here </p>
您可以克隆原始 document
,删除克隆 document
处的 <script>
个元素,然后迭代克隆 document