【问题标题】:Using a TreeWalker to retrieve non-Javascript text nodes使用 TreeWalker 检索非 Javascript 文本节点
【发布时间】:2016-09-07 18:24:32
【问题描述】:

This question 教授如何获取文档中的所有 TextNode,这也让我获得了 Javascript 文本。过滤掉所有 Javascript 代码节点的最佳方法是什么?

【问题讨论】:

    标签: javascript dom dhtml textnode


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您可以克隆原始document,删除克隆document处的&lt;script&gt;元素,然后迭代克隆document的剩余节点

      【讨论】: