如何在jquery中的div中获取子div的文本?

时间:2012-01-03 00:34:15

标签: jquery html

假设我有一个div容器,其中包含多个具有一定宽度和高度的div。我希望单击div中的文本。

<div id="containId">
<div>Sometext1
<div class="description">This is a desc</div>
</div>
<div>Sometext2
<div class="description">This is a desc</div>
 </div>
<div>Sometext3
<div class="description">This is a desc</div>
</div>
<div>Sometext4
<div class="description">This is a desc</div>
</div>
<div>Sometext5
<div class="description">This is a desc</div>
</div>
</div>

如何使用当用户点击containsId中的div时,我可以将文本转换为变量(只是Sometext#部分而不是那些div中的描述div)?

3 个答案:

答案 0 :(得分:2)

$("#containId > div").click(function () {
   alert(this.firstChild.nodeValue);
});

演示:http://jsfiddle.net/q8VRe/5

答案 1 :(得分:1)

使用类似的东西:

$("#containId div").click( function(){
   var x = $(this).text();
});

如果您只想使用第一个节点的文本值:

var x = this.firstChild.nodeValue

如果要从点击中排除第二级div,可以使用:

$("#containId div").click( function(){
    var x = this.firstChild.nodeValue;
}).find("div").click( function(){
    return false;
});

答案 2 :(得分:1)

这应该这样做:

$('#containId > div').click(function() {
    var text = $(this).contents().map(function() {
        if(this.nodeType !== 3) return null;
        return this.nodeValue;
    }).get().join('');
});

它的工作方式如下:.contents()返回一个包含所有子节点的jQuery对象,而不仅仅是元素节点。 .map()用于过滤掉非文本节点并检索文本节点的文本值。

DEMO

这将检索所有文本节点的值,而不仅仅是第一个。如果您只想获取第一个文本节点的值,请使用@karim's answer(更简单)。