Odpowiedzi:
Użyj children()
i each()
, możesz opcjonalnie przekazać selektor dochildren
$('#mydiv').children('input').each(function () {
alert(this.value); // "this" is the current element in the loop
});
Możesz także użyć bezpośredniego selektora podrzędnego:
$('#mydiv > input').each(function () { /* ... */ });
each()
. Sprawdź dokumenty, do których link znajduje się w powyższej odpowiedzi.
Możliwe jest także iterowanie wszystkich elementów w określonym kontekście, bez względu na to, jak głęboko są zagnieżdżone:
$('input', $('#mydiv')).each(function () {
console.log($(this)); //log every element found to console output
});
Drugim parametrem $ („# mydiv”) przekazywanym do selektora „wejściowego” jQuery jest kontekst. W takim przypadku klauzula each () będzie iterować przez wszystkie elementy wejściowe w kontenerze #mydiv, nawet jeśli nie są one bezpośrednimi potomkami #mydiv.
Jeśli chcesz rekurencyjnie zapętlać elementy potomne :
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"));
UWAGA: W tym przykładzie pokazuję procedury obsługi zdarzeń zarejestrowane dla obiektu.
Można to również zrobić w ten sposób:
$('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
});
Powoduje to iterację wszystkich elementów podrzędnych, a ich element z wartością indeksu można uzyskać osobno, używając odpowiednio elementu i indeksu .
Nie sądzę, że musisz użyć each()
, możesz użyć standardowej pętli
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");
}
w ten sposób możesz mieć standardowe funkcje pętli, takie jak break
i continue
działa domyślnie
również debugging will be easier
$.each()
zawsze jest wolniejsze niż for
pętla i jest to jedyna odpowiedź, która go używa. Kluczem tutaj jest użycie .eq()
do uzyskania dostępu do rzeczywistego elementu w children
tablicy, a nie []
notacji nawiasu ( ).