2009-05-27 4 views
5

jQueryで特定の要素を選択する方法に苦しんでいます。条件はここで概説:私の機能の関連する時点でjQueryの選択:トラバースアップ、バックダウン

  • this参照spanを。
  • spanは、子供、孫、または偉大な孫でも構いませんが、階層の上にはtdが含まれています。
  • 私は最後にspantdの中から選択したいと思います。
  • spanは、thisであってもよく、spanであってもよい。
  • spanのタグは、tdを含む子の直接の子であるため、last-childは実行可能です。しかし、将来の柔軟性のために、それが直接の子であると想定しないソリューションが好まれます。

    $(this).parents('td') 
    

    私が選択したtdの内部で最終spanを取得するために、DOMツリーの下に戻ってトラバースする方法がわからない:これまでのところ、私は正しい親要素を選択するには、これを使用しています

。ありがとう!以下の私のコメントパー

編集

、また最後の方、spanまたはdivから選択するとよいでしょう。

答えて

12
$(this).parents('td').children('span:last'); 

トリックを行う必要があります。

私は直接の子に対処するだけでなく、あなたの欲求に気付かなかった

編集。あなたはすべてのファミリー・ツリーをしたい場合は、私はspanは常にtdの子だろうと想定していた

$(this).parents('td').find('span:last') 

を使用します。これは、すでに答えとして受け入れられたので、

後世のための最終的な編集

、(人々が将来的にこの答えを探して、それより簡単にするために)、ベンは、よりエレガントな解決策で思い付きました私はここに置くつもりだ彼の答え:ベンが言ったように

$(this).closest('td').find('div,span').filter(':last') 

、あなたはjQueryの1.3使用している必要がありますclosest()のために動作するように。よくできました!最後divまたはspanを選択するには:

$(this).closest('td').find('span:last') 

編集:すべての子孫ノードを検索します:-)

+0

children()は、直系の子のみを検索します。 –

4

あなたが探している機能がfind(expr)で、

$(this).closest('td').find('div,span').filter(':last') 

編集2:Markは、の代わりにclosest()を使用するのに優れていますを参照してください。ただし、jQuery 1.3を使用する必要があることに注意してください。

+0

ありがとう!私たちはもう少し微調整できますか?最後の要素を探したいのですが、spanに限定する代わりに、spanやdivにすることができますか? –

+0

spanに置き換えることができます。 –

+0

私はスパンまたはdivについて話しています。無効な構文ですが、次のようなものです: $(this).parents( 'td')。filter( 'input')。find( 'div、span:last') –

5

closestをこの場合はparentsとすることをお勧めします。あなたは祖先に2つ以上の 'td'要素があることを心配する必要はありません。

$(this).closest('td').children("span:last")