Jawaban:
Gunakan children()
dan each()
, Anda dapat meneruskan pemilih secara opsionalchildren
$('#mydiv').children('input').each(function () {
alert(this.value); // "this" is the current element in the loop
});
Anda juga bisa menggunakan pemilih anak langsung:
$('#mydiv > input').each(function () { /* ... */ });
each()
. Periksa dokumen, ditautkan dalam jawaban di atas.
Dimungkinkan juga untuk beralih melalui semua elemen dalam konteks tertentu, tidak peduli seberapa dalam mereka:
$('input', $('#mydiv')).each(function () {
console.log($(this)); //log every element found to console output
});
Parameter kedua $ ('# mydiv') yang dilewatkan ke pemilih 'input' jQuery adalah konteksnya. Dalam hal ini setiap klausa () akan beralih melalui semua elemen input dalam wadah #mydiv, bahkan jika mereka bukan anak-anak langsung dari #mydiv.
Jika Anda perlu mengulang elemen anak secara rekursif :
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"));
CATATAN: Dalam contoh ini saya menunjukkan penangan peristiwa yang terdaftar dengan suatu objek.
Ini dapat dilakukan dengan cara ini juga:
$('input', '#div').each(function () {
console.log($(this)); //log every element found to console output
});
$('#myDiv').children().each( (index, element) => {
console.log(index); // children's index
console.log(element); // children's element
});
Ini berulang melalui semua anak-anak dan elemen mereka dengan nilai indeks dapat diakses secara terpisah menggunakan elemen dan indeks masing-masing.
Saya tidak berpikir bahwa Anda perlu menggunakan each()
, Anda dapat menggunakan standar untuk loop
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");
}
dengan cara ini Anda dapat memiliki standar untuk fitur loop seperti break
dan continue
berfungsi secara default
juga debugging will be easier
$.each()
selalu lebih lambat daripada satu for
lingkaran, dan ini adalah satu-satunya jawaban yang menggunakannya. Kuncinya di sini adalah menggunakan .eq()
untuk mengakses elemen aktual dalam children
array dan bukan []
notasi braket ( ).