jQueryを使用してdivの子要素を反復するにはどうすればよいですか?


257

私にはdivがあり、その中にいくつかの入力要素があります...これらの各要素を反復処理したいと思います。アイデア?

回答:


476

children()およびを使用してeach()、必要に応じてセレクターを渡すことができますchildren

$('#mydiv').children('input').each(function () {
    alert(this.value); // "this" is the current element in the loop
});

直接の子セレクターを使用することもできます。

$('#mydiv > input').each(function () { /* ... */ });

68
次に、クロージャー内で$(this)を使用して、ループ内の「現在の」アイテムにアクセスします。
amarsuperstar 2010年

1
@amarsuperstar:その情報を追加しているところだった:-)
Andy E

$(this)が親の「n」番目の子であると仮定して、「n」の値を知る方法はありますか?
Souvik Ghosh 2016

1
@SouvikGhosh:のコールバック関数の最初の引数としてインデックスが渡されますeach()。上記の回答にリンクされているドキュメントを確認してください。
アンディE

55

特定のコンテキスト内のすべての要素を反復処理することもできます。要素がどれだけ深くネストされているかは問題ではありません。

$('input', $('#mydiv')).each(function () {
    console.log($(this)); //log every element found to console output
});

jQueryの「入力」セレクターに渡される2番目のパラメーター$( '#mydiv')はコンテキストです。この場合、each()句は、#mydivの直接の子でなくても、#mydivコンテナー内のすべての入力要素を反復処理します。


1
おそらく、この解決策を入れ子にしているため、私には効果がありましたが、他の解決策は効果がありませんでした。そのため、通常はこれがより良い解決策であると思います。
arame3333 2015年

これは私が探していたものです。それらの値からjsonを作成する方法はありますか?すべてのテーマをjsonとして投稿する必要があります。
ムハンマドサキブ

8

子要素を再帰的にループする必要がある場合:

function recursiveEach($element){
    $element.children().each(function () {
        var $currentElement = $(this);
        // Show element
        console.info($currentElement);
        // Show events handlers of current element
        console.info($currentElement.data('events'));
        // Loop her children
        recursiveEach($currentElement);
    });
}

// Parent div
recursiveEach($("#div"));   

注: この例では、オブジェクトに登録されたイベントハンドラーを示します。


5

次の方法でも行うことができます。

$('input', '#div').each(function () {
    console.log($(this)); //log every element found to console output
});

3
$('#myDiv').children().each( (index, element) => {
    console.log(index);     // children's index
    console.log(element);   // children's element
 });

これはすべての子を反復処理し、インデックス値を持つ要素には要素インデックスをそれぞれ使用して個別にアクセスできます。


1

children()はそれ自体がループです。

$('.element').children().animate({
'opacity':'0'
});

1

私はeach()あなたが使う必要があるとは思いません 、あなたは標準のforループを使うことができます

var children = $element.children().not(".pb-sortable-placeholder");
for (var i = 0; i < children.length; i++) {
    var currentChild = children.eq(i);
    // whatever logic you want
    var oldPosition = currentChild.data("position");
}

これにより、標準のforループ機能を使用でき、デフォルトbreakcontinue機能します

また、 debugging will be easier


私の経験では、これ$.each()は常にforループよりも遅く、これを使用する唯一の答えはこれです。ここで重要なのは、を使用して、ブラケット()表記ではなく.eq()children配列内の実際の要素にアクセスすること[]です。
elPastor
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.