使用TreeWalker检索非Javascript文本节点

lve*_*lla 1 javascript dom dhtml textnode

这个问题教会如何获取文档中的所有TextNode,这也是我的Javascript文本.过滤掉所有Javascript代码节点的最佳方法是什么?

Ama*_*dan 9

<script>标签内的文字只有一个共同点:它们的父<script>元素是一个元素.

if (node.parentNode.nodeName !== 'SCRIPT')
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用过滤器:

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);
Run Code Online (Sandbox Code Playgroud)
<script> var str = "script here"; </script>
<p> text here </p>
Run Code Online (Sandbox Code Playgroud)