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.