Jquery 获取元素内的文本(不包括Decentant)
我看到jQuery具有Jquery 获取元素内的文本(不包括Decentant),jquery,Jquery,我看到jQuery具有.text()函数,用于获取元素及其子元素中的所有文本 有没有办法只获取直接位于元素中的文本 例如 这里有一些文字。 从中我只想得到这里是文本。 var result = $('div').contents().map(function() { if( this.nodeType === 3 ) { return this.data; } }).get().join(''); 示例: 这将使用该方法获取div的所有子级,包括文本节点,然
.text()
函数,用于获取元素及其子元素中的所有文本
有没有办法只获取直接位于元素中的文本
例如
这里有一些文字。
从中我只想得到这里是文本。
var result = $('div').contents().map(function() {
if( this.nodeType === 3 ) {
return this.data;
}
}).get().join('');
示例:
这将使用该方法获取div
的所有子级,包括文本节点,然后使用其.data
属性仅构建文本节点(This.nodeType==3
)的文本内容集合
完成后,它使用方法从集合中生成一个数组,最后使用方法连接结果
当然,您的选择器应该特定于您的目标
编辑:如果您想稍微规范化单词之间的空格,可以使用该方法从每个文本节点的内容中修剪前导和尾随空格,然后给
.join()
一个空格来连接每个集合
var result = $('div').contents().map(function() {
if( this.nodeType === 3 ) {
return $.trim( this.data );
}
}).get().join(' ');
alert( result );
示例:
我们甚至可以将其缩短一点,并确保同时排除任何空文本节点:
var result = $('div').contents().map(function() {
return $.trim( this.data ) || null;
}).get().join(' ');
alert( result );
示例:
编辑2: 通过使用该方法,您可以获得巨大的性能提升,这意味着更通用的使用
var result = $.map( $('div')[0].childNodes, function(val,i) {
if (val.nodeType === 3) {
return val.data;
}
}).join('');
显示差异。在
var divClone = $('div').clone(); // WARNING:
divClone.children().remove(); // This code is much slower than the
alert(divClone.text()); // code in the selected answer.
更新
@patrick dw答案中的性能测试清楚地表明,他的方法是更好的选择。我没有删除这个答案,因为我认为它对未来可能不知道哪种方法更好的读者很有帮助。16秒后你的答案。。该死~LOL@Liangliang:必须快点;o) @patrick dw,你为什么要这么做?由于引入了不必要的字符串解析问题,这似乎过于复杂了。性能是否比DOM方法更好?@smartcaveman:我个人认为这比克隆DOM元素、遍历其子元素并销毁子元素更简单。还留出空间来稍微整理一下间距。如果我猜的话,我会说它也更快,但只有性能测试才能确定。@smartcaveman:哇,Chrome13有很大的不同。
var divClone = $('div').clone(); // WARNING:
divClone.children().remove(); // This code is much slower than the
alert(divClone.text()); // code in the selected answer.