jquery 获取直接下级的text

<p>
aaaaa
<div>bbbbb</div>
ccccc
<div>ddddd</div>
eeeee
</p>

如何能只取p标签里的文本也就是aaaaabbbbbccccc,
如果直接用jquery的text()方法会将div里的文本也取出来。
最好不要采用删除div标签的方式,也不要采用html()出来所有文本,再用正则去筛选。
谢谢!

阅读 6.8k
1 个回答

首先在p里面嵌套div是不正确的做法。
你可以试试 $('p').length//2
因为浏览器会自动进行纠错如下(Chrome):

<p>
aaaaa
</p>
<div>bbbbb</div>
ccccc
<div>ddddd</div>
eeeee
<p></p>

另外aaaaa,eeeee建议用span或者p包含起来。直接的文字节点不符合语义的做法。而且在进行DOM处理时会增加一些工作,这里文字左右是不可见的换行符。最重要的是,jQuery中的选择器是不会选择文本节点的,只能使用contents+filter了,使用contents操作有性能有影响,慎用。

将p改成div时可以这样做:

<div id="el">
aaaaa
<div>bbbbb</div>
ccccc
<div>ddddd</div>
eeeee
</div>​
var $rs = $('#el').contents().filter(function() {
    return this.nodeType === 3;
});

var text = $rs.text();
$('#el').after(text);​//注意文字周围有换行符,需要再处理一下。

http://jsfiddle.net/5dkMB/

logo
101 新手上路
子站问答
访问
宣传栏