查找HTML页面中的所有文本节点[重复]

mkshixfv  于 11个月前  发布在  其他
关注(0)|答案(2)|浏览(74)

此问题在此处已有答案

getElementsByTagName() equivalent for textNodes(7个回答)
两年前关闭。
对于这个问题,我需要找到一个特定节点下的所有文本节点。我可以这样做:

function textNodesUnder(root){
  var textNodes = [];
  addTextNodes(root);
  [].forEach.call(root.querySelectorAll('*'),addTextNodes);
  return textNodes;

  function addTextNodes(el){
    textNodes = textNodes.concat(
      [].filter.call(el.childNodes,function(k){
        return k.nodeType==Node.TEXT_NODE;
      })
    );
  }
}

字符串
然而,这似乎并不优雅,因为使用EQUIPONE可以简单地查询.//text()并完成它。

在HTML文档中获取特定元素下的所有文本节点的最简单方法是什么,适用于IE9+,Safari5+,Chrome19+,Firefox12+,Opera11+?

  • “最简单”的定义是“高效、简短、不打高尔夫球”。
f45qwnt8

f45qwnt81#

使用createTreeWalker是从DOM查询多个节点的一种非常有效的方法。

/**
 * Retrieves an array of all text nodes under a given element.
 *
 * @param { Node } el - The element under which to search for text nodes.
 * @returns { Node[] } An array of text nodes found under the given element.
 */
function textNodesUnder(el) {
  const children = [] // Type: Node[]
  const walker = document.createTreeWalker(el, NodeFilter.SHOW_TEXT)
  while(walker.nextNode()) {
    children.push(walker.currentNode)
  }
  return children
}

字符串
注:一个更完整的答案与多个例子可以在这里找到:getElementsByTagName() equivalent for textNodes

t98cgbkg

t98cgbkg2#

function deepText(node){
    var A= [];
    if(node){
        node= node.firstChild;
        while(node!= null){
            if(node.nodeType== 3) A[A.length]=node;
            else A= A.concat(deepText(node));
            node= node.nextSibling;
        }
    }
    return A;
}

字符串

相关问题