使用 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

的剩余节点