For this question I needed to find all text nodes under a particular node. I can do this like so:
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;
})
);
}
}
However, this seems inelegant in light of the fact that with XPath one could simply query for .//text()
and be done with it.
What's the simplest way to get all text nodes under a particular element in an HTML document, that works on IE9+, Safari5+, Chrome19+, Firefox12+, Opera11+?
"Simplest" is defined loosely as "efficient and short, without golfing".