getInnerText (JavaScript)
This function gets the inner text of the supplied node. It is recursive, so includes inner text of any child nodes. <br /> tags will be converted to linebreaks. Whitespace can be optionally excluded.
Should work in any W3C DOM level 1 compliant browser.
Simple to use - just do:
myNode = document.getElementById("myNode");
// include whitespace
var text = getInnerText(myNode);
var textNoWhiteSpace = getInnerText(myNode,true);
And the script itself:
function getInnerText(node,ignorewhitespace)
{
var text = "";
// if the node has children, loop through them
if(node.hasChildNodes())
{
var children = node.childNodes;
for(var i=0; i<children.length; i++)
{
// if node is a text node append it
if(children[i].nodeName == "#text")
{
if(ignorewhitespace)
{
if(!/^\s+$/.test(children[i].nodeValue))
{
text = text.concat(children[i].nodeValue);
}
}
else
{
text = text.concat(children[i].nodeValue);
}
}
// if node is a line break append \n
else if(children[i].nodeName == "BR")
{
text = text.concat("\n");
}
// otherwise call this function again to get the text
else
{
text = text.concat(getInnerText(children[i]));
}
}
}
// it has no children, so get the text
else
{
// if node is a text node append it
if(node.nodeName == "#text")
{
text = text.concat(node.nodeValue);
}
// if node is a line break append \n
else if(node.nodeName == "BR")
{
text = text.concat("\n");
}
}
return text;
}
Tags: Web Developer Blog, JavaScript
Comments
It works pretty well in a majority of browsers.
Thanks,
Vinh