32

目的のために、特定のクラスを持つ親の特定のクラスの最初の子のみを選択するにはどうすればよいclone()ですか?

<div class="sector_order">

    <div class="line_item_wrapper">
    SELECT THIS DIV
    </div>

    <div class="line_item_wrapper">
    NOT THIS DIV
    </div>

</div>

私はこのようにしようとしています:

var form1 = $(this)
    .parents('.sector_order')
    .children('.line_item_wrapper')
    .children().clone(true)

そして、クラスで両方の内部divをline_item_wrapper取得しますが、この追加を試してみると、空のオブジェクトが取得されます。

children('.line_item_wrapper :first')

ありがとう!

4

4 に答える 4

55

あなたの問題は、いくつかの点でセレクターが間違っていることです。

parents()メソッドに渡されたセレクターに一致する 1 つ、2 つ、または多数の要素を返します。最初に一致した要素の使用に制限するにはclosest()(渡されたセレクターに一致する要素を 1 つ返すか、まったく返さない)。

children()メソッドを最初に使用すると、両方の要素が指定されたセレクターに一致し、クラスが;であるため、両方の要素が返されます。どちらが必要かを明示的に述べる必要があります。セレクター (またはメソッド)またはセレクターline_item_wrapperのいずれかを使用できます。:firstfirst():first-child

メソッドへの 2 番目の呼び出しはchildren()、セレクターによって一致した最初の要素の子を見つけますが、これは望ましくないようです。

とにかく、親を使用する必要がある場合(同じ$(this)要素から開始):

var form1 = $(this).closest('.sector_order').find('.line_item_wrapper:first').clone(true);

または:

var form1 = $(this).closest('.sector_order').find('.line_item_wrapper').first().clone(true);

または:

var form1 = $(this).closest('.sector_order').find('.line_item_wrapper:first-child').clone(true);

または、率直に言って、より単純なアプローチ (ただし、これは親クラス名のチェックを省きます):

var form1 = $(this).prevAll('.line_item_wrapper:last');

または:

var form1 = $(this).siblings('.line_item_wrapper').eq(0);

参考文献:

于 2012-11-15T21:35:02.220 に答える
12

に無効なセレクターを渡していますchildren()。それ以外の

.children('.line_item_wrapper :first')

試す

.children('.line_item_wrapper').first()
于 2012-11-15T21:17:16.677 に答える
3

使用する:first-child

var form1 = $(this).closest('.sector_order').find(':first-child');

また.first()

var form1 = $(this).closest('.sector_order').find('.line_item_wrapper').first();
于 2012-11-15T21:17:34.377 に答える
2

これを試して:

var $firstDiv = $(".sector_order > .line_item_wrapper:eq(0)");

sector_orderこれにより、クラスの最初の直接の子孫が得られますline_item_wrapper

フィドルの例

于 2012-11-15T21:15:59.660 に答える