3

例えば:

<div class="mainWrapper">
    <div class="FirstLayer">
        <input class="foo" value="foo" />
    </div>

    <div class="SecondLayer">
        <div class="thirdLayer">
            <input class="fee" />
        </div>
    </div>
</div>

input.feeを jQuery オブジェクトとして持っていて、 の値も取得する必要があるとしますinput.foo。などの多数のアプローチを使用できることがわかりまし$(this).parents(':eq(2)').find('.foo')たが、さまざまなレベルとノード数を持つレイアウトでこの 1 つの方法を使用したいと考えています。.feeしたがって、単純に開始して、最初に一致する要素が見つかるまで上昇し続けるメソッドがあるかどうか疑問に思っていますが、.prevAll()これを行うようには見えません。多く.fooの要素と要素があり、コンテキスト内.feeの最初の要素が特に必要です。.fee

4

3 に答える 3

8

これはどう:

$('input.fee').closest(':has("input.foo")')
              .find('input.foo').val();

これがJS Fiddleです。)

更新: @VisioN への称賛 - もちろん、 にparents:first置き換えられclosestます。

于 2012-11-14T11:31:54.653 に答える
1

これにより、前のinput.fooが選択されます

// self might have siblings that are input.foo so include in selection
$( $("input.fee").parentsUntil(":has(input.foo)").andSelf()

        // if input.off is sibling of input.fee then nothing will
        // be returned from parentsUntil. This is the only time input.fee
        // will be selected by last(). Reverse makes sure self is at index 0
        .get().reverse() )

        // last => closest element
        .last()                 

        //fetch siblings that contain or are input.foo elements
        .prevAll(":has(input.foo), input.foo") 

        // first is closest
        .first() 

        // return jQuery object with all descendants
        .find("*")         

        // include Self in case it is an input.foo element 
        .andSelf() 

        .filter("input.foo")

        // return value of first matching element
        .val() 
于 2012-11-14T11:46:59.123 に答える
-1

jQuery.closest()セレクターを受け取り、必要なことを正確に実行します-何かの親である最初の一致する要素を見つけます。要素の祖先をフィルタリングするためにセレクターを使用するjQuery.parents()もあります。メソッドと組み合わせて使用​​すると、find設定が完了します。

$('input.fee').closest('.mainWrapper").find('.foo')トリックはしますか?

于 2012-11-14T11:30:05.977 に答える