2012-01-03 324 views
1

說我有一個具有一定寬度和高度的多個div的div容器。我想要點擊div內的文字。如何在jquery中獲取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> 

如何讓這個當用戶點擊內containId一個div,我可以把文本存到一個變量(只Sometext#一部分,而不是這些div中描述的div)?

+0

爲什麼你需要jQuery來做到這一點? – Rob 2012-01-03 00:40:08

回答

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(更簡單)。

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; 
}); 
+1

'.text()'也會包含後代的文字。 – 2012-01-03 00:48:45