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

mkshixfv  于 2023-11-15  发布在  其他
关注(0)|答案(2)|浏览(101)

此问题在此处已有答案

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

  1. function textNodesUnder(root){
  2. var textNodes = [];
  3. addTextNodes(root);
  4. [].forEach.call(root.querySelectorAll('*'),addTextNodes);
  5. return textNodes;
  6. function addTextNodes(el){
  7. textNodes = textNodes.concat(
  8. [].filter.call(el.childNodes,function(k){
  9. return k.nodeType==Node.TEXT_NODE;
  10. })
  11. );
  12. }
  13. }

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

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

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

f45qwnt81#

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

  1. /**
  2. * Retrieves an array of all text nodes under a given element.
  3. *
  4. * @param { Node } el - The element under which to search for text nodes.
  5. * @returns { Node[] } An array of text nodes found under the given element.
  6. */
  7. function textNodesUnder(el) {
  8. const children = [] // Type: Node[]
  9. const walker = document.createTreeWalker(el, NodeFilter.SHOW_TEXT)
  10. while(walker.nextNode()) {
  11. children.push(walker.currentNode)
  12. }
  13. return children
  14. }

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

展开查看全部
t98cgbkg

t98cgbkg2#

  1. function deepText(node){
  2. var A= [];
  3. if(node){
  4. node= node.firstChild;
  5. while(node!= null){
  6. if(node.nodeType== 3) A[A.length]=node;
  7. else A= A.concat(deepText(node));
  8. node= node.nextSibling;
  9. }
  10. }
  11. return A;
  12. }

字符串

相关问题