在元素中获得文本,不包括死者
我看到,jQuery具有.text()函数来获取元素及其后代元素中的所有文本。 
有没有办法只获得直接在元素内的文本?
例如。
 <div> Here is <b>some</b> text. </div> 
 从那我想得到只是Here is text. 
 var result = $('div').contents().map(function() { if( this.nodeType === 3 ) { return this.data; } }).get().join(''); 
例如: http : //jsfiddle.net/PeXue/
 这个使用contents() [docs]方法来获取div所有子节点,包括文本节点,然后map() [docs]方法来构build一个只有文本节点的文本内容的集合( this.nodeType === 3 )使用他们的.data属性。 
 在完成之后,它使用get() [docs]方法从集合中创build一个数组,最后使用.join() [docs]连接结果。 
 当然你的select器应该是针对你所定位的<div> 。 
  编辑:如果你想正常化单词之间的空格,你可以使用jQuery.trim() [docs]方法修剪每个文本节点的内容的前导和尾随空白,然后给.join()一个单个空间join每个集合。 
 var result = $('div').contents().map(function() { if( this.nodeType === 3 ) { return $.trim( this.data ); } }).get().join(' '); alert( result ); 
例如: http : //jsfiddle.net/PeXue/1
我们甚至可以缩短一点,并确保同时排除任何空的文本节点:
 var result = $('div').contents().map(function() { return $.trim( this.data ) || null; }).get().join(' '); alert( result ); 
例如: http : //jsfiddle.net/PeXue/2
编辑2:
 通过使用jQuery.map() [docs]方法,您可以获得巨大的性能提升,这是为了更通用的用途。 
 var result = $.map( $('div')[0].childNodes, function(val,i) { if (val.nodeType === 3) { return val.data; } }).join(''); 
这是一个performance差异的性能testing 。
在jsFiddle工作的例子
 var divClone = $('div').clone(); // WARNING: divClone.children().remove(); // This code is much slower than the alert(divClone.text()); // code in the selected answer. 
更新
@帕特里克dw的答案中的性能testing清楚地表明, 他的方法是更好的select 。 我没有删除这个答案,因为我认为这对未来读者可能不知道哪个方法更好是有帮助的。