在HTML页面中查找所有文本节点

我可以这样做:

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;

})

);

}

}

但是,鉴于使用XPath可以简单地查询.//text()并完成它的事实,这似乎是微不足道的。

“最简单”被粗略地定义为“高效而又短,没有打高尔夫球”。

回答:

根据@kennebec的回答,该逻辑的实现略为严格:

function textNodesUnder(node){

var all = [];

for (node=node.firstChild;node;node=node.nextSibling){

if (node.nodeType==3) all.push(node);

else all = all.concat(textNodesUnder(node));

}

return all;

}

但是,使用的速度更快,更紧密,更美观createTreeWalker,因此浏览器会为您过滤掉除文本节点以外的所有内容:

function textNodesUnder(el){

var n, a=[], walk=document.createTreeWalker(el,NodeFilter.SHOW_TEXT,null,false);

while(n=walk.nextNode()) a.push(n);

return a;

}

以上是 在HTML页面中查找所有文本节点 的全部内容, 来源链接: utcz.com/qa/403411.html

回到顶部