2013-03-26 14 views
26

closest()は、要素自体をテストし、DOMツリーの祖先を走査することによってセレクタに一致する最初の要素を取得します。しかし、私が知りたいと思うのは、結果を得るための方法はありますか?ありがとう。jqueryに最も近い除外自己

例を挙げておきます。それを確認してください。

<div id='div1' class="container"> 
    <div id="div2" class="container"> 
     <!--many nested div.container as it directly or indirectly children --> 
    </div> 
    <div id="div3" class="container"> 
     <!--many nested div.container as it directly or indirectly children --> 
    </div> 
</div> 

$(function() { 

    $('div.container').on('mouseover', function(e){ 
     //I only want to select the first parent with the class container. 
     //closest include the this element. 
     console.log($(this).closest('.container').attr('id')); 
    }); 
}); 
+0

もっと詳しく説明できますか?コードスニペットを追加するとより便利になります... – Reigel

+3

'.parents()'が役に立ちます。 –

+0

@Reigelもう一度レビューしていただけますか?私は更新しました。ありがとう。 –

答えて

0

あなたが本当に唯一の親divをしたい場合は右の答えは[はい$(、.parents('.container:first');おかげ

+15

パフォーマンス面では、 '.parents()'とは違って、 '.parent()。closest( '。container')'はドキュメントレベルまで常にトラバースするのとは異なり、 –

+0

あなたは知っていますか?私は '.parent()....'は少し難しいコードだと思う。 –

+3

はい。最初のレベルに一致させたくないときに1レベル上に移動するのは論理的です。いずれの場合も同じ出力が得られます。違いは、 ':first 'はSizzle拡張であり、セレクタは通常(前の)各要素(祖先)に対してマッチするので、' parents'戻る。 –

69

あなたは.closest()祖先を見つけようとする前にレベルをアップトラバースすることができます

$(this).parent().closest('.container'); 
0

ですthis).parents( '。container')が動作します。最も近い要素を探して、それが兄弟であることを可能にしたい場合は、$(this).prev( '。container')を使用できます。

+0

これは、親が1レベル以上で、その親をクラス別にターゲット設定しているかどうかわからないため、役に立ちません!

がクラスを持たない別のdivタグにネストされていて、それでも彼はそれをparentにターゲティングしたい場合はどうなりますか? –