Risposte:
Utilizzare children()
e each()
, facoltativamente, è possibile passare un selettore achildren
$('#mydiv').children('input').each(function () {
alert(this.value); // "this" is the current element in the loop
});
Puoi anche usare il selettore figlio immediato:
$('#mydiv > input').each(function () { /* ... */ });
each()
. Controlla i documenti, collegati nella risposta sopra.
È anche possibile iterare attraverso tutti gli elementi all'interno di un contesto specifico, non meno chiaro quanto siano profondamente nidificati:
$('input', $('#mydiv')).each(function () {
console.log($(this)); //log every element found to console output
});
Il secondo parametro $ ('# mydiv') che viene passato al Selettore 'input' di jQuery è il contesto. In questo caso la clausola each () ripeterà tutti gli elementi di input all'interno del contenitore #mydiv, anche se non sono figli diretti di #mydiv.
Se devi ricorrere in modo ricorsivo agli elementi figlio :
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"));
NOTA: in questo esempio mostro i gestori di eventi registrati con un oggetto.
Può essere fatto anche in questo modo:
$('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
});
Questo scorre attraverso tutti i figli e il loro elemento con valore di indice è accessibile separatamente usando rispettivamente elemento e indice .
Non penso che tu debba usare each()
, puoi usare lo standard per il 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");
}
in questo modo puoi avere lo standard per funzionalità di loop come break
e continue
funziona di default
anche il debugging will be easier
$.each()
è sempre più lento di un for
ciclo, e questa è l'unica risposta che la usa. La chiave qui è usare il .eq()
per accedere all'elemento reale all'interno children
dell'array e non dalla parentesi ( []
) notazione.