在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