I see that jQuery has the .text() function for getting all text within an element and its descendant elements.
Is there a way to only get the text that is directly within the element?
eg.
<div>
Here is <b>some</b> text.
</div>
From that I would want to get just Here is text.
Example: http://jsfiddle.net/PeXue/
This uses the
contents()[docs] method to get all children of thediv, including text nodes, then themap()[docs] method to build a collection of the text contents of only the text nodes (this.nodeType === 3) using their.dataproperty.After that is done, it makes an Array from the collection using the
get()[docs] method, and finally joins the result using.join()[docs].Of course your selector should be specific to the
<div>you’re targeting.EDIT: If you want to normalize the spaces between the words a bit, you can trim the leading and trailing white space from the content of each text node using the
jQuery.trim()[docs] method, then give.join()a single space to join each set.Example: http://jsfiddle.net/PeXue/1
We could even shorten it a bit, and ensure that any empty text nodes are excluded at the same time:
Example: http://jsfiddle.net/PeXue/2
EDIT 2:
You can get an enormous performance increase by using the
jQuery.map()[docs] method, which is meant for more generic use.Here’s a performance test showing the difference.