2012-05-11 26 views
1

簡単にする必要があります。私は各行にボタンを追加しています。そのボタンは、その行のいくつかのテーブルセルから情報を取得します。JQuery複雑なセレクタの問題

<tr> 
    <td><img src='targetInfo' /></td> 
    <td></td> 
    <td> 
    <div>CLICKED ELEMENT</div> 
    </td> 
</tr> 

私が期待する:

this: $(this).closest('tr td:eq(0) img').attr('src');または

this: $(this).closest('tr>td:eq(0)>img').attr('src');

が動作するように、どちらも正常に動作しています。

現在、以下を使用する必要がありますが、これは最適ではないようです。私のセレクターには何が欠けていますか?

$(this).closest('tr').children('td:eq(0)').children('img').attr('src'); 

答えて

2

あなたの現在の作業ソリューションが最善のアプローチ(またはそれに類似のもののような、)です:

$(this).closest('tr').children('td:eq(0) > img').attr('src'); 

この問題については、回避することはできません木を上にしてから下に戻らなければならない。これを達成するにはいくつかの方法がありますが、1つのセレクターではできません。

+0

恐れ入りました。私はその解決策を試みたが、その結果として未定義になった。私はそれを見て動作すると思うだろうが、何かが正しくない。 – Wesley

+0

うーん...もう少しそれを見て、私は何かが目障りに間違って見ることができません。私はそれのjsfiddleで刺すように幸せだろう。 – jmar777

1

試してみてください。

$(this).closest('tr').find('td').eq(0).find('img').attr('src'); 

か:

$(this).closest('tr').find('td:first').find('img').attr('src'); 
0

私は最近同様のことをしました。私は親と初子を使っただけです。

$(this).closest('tr').find('td:first-child img').attr('src') 
+0

唯一の問題は、TRがDIVの直接の親ではないことです。セレクタはチェーンを上って最初のTR – Wesley

+1

Ahを見つけるために.closestで始まり、絶対に正しいものでなければなりません。入れ子になったdiv内からのクリックが完全に欠落していました。私は行のすべてのセルをクリック可能にしていました。ごめんなさい! – MetalFrog