JQuery kullanarak div öğelerinin alt öğeleri aracılığıyla nasıl yineleyebilirim?


257

Bir div var ve içinde birkaç girdi öğesi var ... Bu öğelerin her birini yinelemek istiyorum. Fikirler?

Yanıtlar:


476

Kullanın children()ve each()isteğe bağlı olarak bir seçiciyichildren

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

Ayrıca, hemen çocuk seçiciyi de kullanabilirsiniz:

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

68
sonra döngüdeki "geçerli" öğeye erişmek için kapatma içinde $ (this) kullanın.
— amarsuperstar

1
@ amarsuperstar: sadece bu bilgileri ekleme sürecinde oldu :-)
— Andy E

$ (This) öğesinin ebeveynin "n" çocuğu olduğunu varsayarsak, "n" nin değerini bilmenin bir yolu var mı?
— Souvik Ghosh

1
@SouvikGhosh: dizin, geri arama işlevinin ilk bağımsız değişkeni olarak geçirilir each(). Yukarıdaki cevaba bağlı dokümanları kontrol edin.
— Andy E

56

Ayrıca, ne kadar derin iç içe oldukları önemli değil, belirli bir bağlamdaki tüm öğeler arasında yineleme yapmak da mümkündür:

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

JQuery 'giriş' Seçicisine iletilen ikinci parametre $ ('# mydiv') bağlamdır. Bu durumda, her () deyimi, #mydiv öğesinin doğrudan alt öğeleri olmasa bile #mydiv kapsayıcısındaki tüm girdi öğeleri arasında yineleme yapar.


1
Muhtemelen iç içe geçme nedeniyle bu çözüm benim için çalıştı, diğeri ise işe yaramadı. Bu nedenle bunun normalde daha iyi bir çözüm olduğunu düşünürüm.
— arame3333

Aradığım şey buydu. Değerlerinden json yapmanın herhangi bir yolu var mı? Tüm temayı json olarak göndermem gerekiyor.
— Muhammed Saqib

8

Alt öğeler arasında yinelemeli olarak döngü yapmanız gerekiyorsa :

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"));   

NOT: Bu örnekte, bir nesneye kaydedilmiş olay işleyicilerini gösteririm.


5

Bu şekilde de yapılabilir:

$('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
 });

Bu, tüm çocuklar aracılığıyla yinelenir ve dizin değeri olan öğelerine sırasıyla öğe ve dizin kullanılarak ayrı ayrı erişilebilir .


1

children () kendi içinde bir döngüdür.

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

1

Kullanmanız gerektiğini düşünmüyorum, each()döngü için standart kullanabilirsiniz

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");
}

bu şekilde varsayılan olarak döngü özellikleri için standartlara sahip olabilir breakve continueçalışır

Ayrıca debugging will be easier


Benim deneyimim $.each()her zaman bir fordöngüden daha yavaş ve bunu kullanan tek cevap bu. Buradaki anahtar, braket ( ) gösterimine değil .eq(), childrendizideki gerçek öğeye erişmek için []kullanılır.
— elPastor
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.