2011-06-22 9 views
4

私はこのHTMLを持っている:jQueryでfindのcontains内部を使用できますか?

<table> 
    <tr id="1"><td>test</td><td id="90">value</td></tr> 
    <tr id="2"><td>another</td><td id="98">somthing</td></tr> 
</table> 

と、このjqueryの:

$("tr td:nth-child(2)").find(":contains('value')").each(function(){ 
     alert($(this).parent().attr("id")); 
      }); 

私は、これは動作しますが、それは何を警告しません想定していました。 find部分を削除すると、両方の値が警告されます。何とか私の発見を含めることができる方法はありますか?ここで

はフィドルです:

http://jsfiddle.net/B4wMp/2/

答えて

5

それを行うための正しい方法は似ていますthis:

$("tr td:nth-child(2):contains('value')").each(function(){ 
alert($(this).parent().attr("id")); 
    }); 

なぜあなたはそれが書かれているように動作していませんでしたか?最初のセレクタから、 "value"という単語と "something"という単語を持つtdを持つtdが得られるからです。その選択を取得した後、これらの要素の.find( "...")を実行すると、現在持っているものの中の要素を探し始めます。どちらのtdsもそれらの内部に他の要素を持たないので、.find()セレクタは何も返しません。

+0

優秀な説明、ありがとう! –

5

.find()を削除し、セレクタ

$("tr td:nth-child(2):contains('value')").each(function(){ 
    alert($(this).parent().attr("id")); 
}); 

フィドルに:contains('value')を移動:http://jsfiddle.net/B4wMp/5/

+2

これは、これです。 findは、現在選択されている要素ではなく、子要素を調べます。 –

+0

@ nathan-ありがとう、よく知る –

1

あなたはfindを使用していましたが、既に選択したtd要素の子を探しています。あなたはあなたのtd要素に子供を持っていません。

filterを使用するか、1つのセレクタにマージします

関連する問題