2013-02-09 22 views
10

私は、同じクラス名を共有する多数のサブメニューを持つコードを持っています。 .sub-menuが深い無限のレベルを得ることをjQueryとは反対側です。最上位(最上位/最上位)

.menu 
    .sub-menu 
    .sub-menu 
    .sub-menu 
    .sub-menu 
    .sub-menu 
    .sub-menu 
     .elem 
     .elem 
    .sub-menu 

注:

はここ構造です。

これを達成するには.elemをクリックしたときに、DOMの上位から.sub-menuに達するまでDOMをトラバースしてスタイルを適用する必要があります。私は.closest().parent().find()を知っていますが、jQueryには.topMost(selector)のような機能があるのか​​どうか分かりません。

私が考えることができる唯一の方法は、おそらくループを実行し、その長さが0になるまで新しい要素の.closest('.sub-menu')を通過することです。(このクラスの親がなくなるので、一番上になければなりません。しかし、これにはもっと実用的なアプローチが必要だと思います。

答えて

19

あなたはこのように、parents().last()を使用することができ、あなたは「遠い」親要素が欲しい「最も近いの反対」でと仮定:jQueryの最大横断するとき、あなたは配列の最後の要素をしたい、

$('.elem').click(function() { 
    var $topSubMenu = $(this).parents('.sub-menu').last(); 
}); 

注意DOMの場合、トップレベルのアイテムはコレクションの最後のアイテムになります。

21

質問はやや誤解を招くようです。 closest()が誤って解釈される可能性があります。実際には、最初の一致が見つかるまでツリーを検索することを意味します。その反対は、一致が見つかるまでツリーを検索し、その方法はです。 first().

すべて子孫はfind()を使用することがあります。 find()の反対側はparents()です。

最も近い

()セット内の各要素について、(すべてのレベル) 、素子自体をテストし、DOMツリー内のその祖先を介してアップトラバースすることによってセレクタに一致する最初の要素を取得します。

(全レベル) )(第一

親()(全レベル) が各要素の祖先を取得セットに最初にマッチした要素のセットを減らしオプションでセレクタによってフィルタリングされた、一致した要素の現在のセット内の

親()(次のレベルのみ) がマッチした要素の現在のセット内の各要素の親を取得するには、必要に応じて選択することにより濾過しました。

検索()(すべてのレベル)セレクタ、jQueryオブジェクト、または要素によってフィルタリングマッチした要素の現在のセット、の各要素の子孫を取得します。

+0

将来の読者のために質問の目的を明確にすると思われる場合は、タイトルをより適切なものに自由に編集してください。 –

+0

イムクールでそれ。私はそれが私のグーグルだ。 –

+3

find()がclosest()の反対である点については、これは間違っています。 find()はツリー内のすべての要素を検索します。だから、closest()の逆の検索はfind()。first()です。 –

関連する問題