Como iterar os elementos filhos de uma div usando o jQuery?


257

Eu tenho uma div e ela possui vários elementos de entrada ... Eu gostaria de percorrer cada um desses elementos. Ideias?

Respostas:


476

Use children()e each(), opcionalmente, você pode passar um seletor parachildren

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

Você também pode usar o seletor filho imediato:

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

68
use $ (this) no fechamento para acessar o item "atual" no loop.
amarsuperstar

1
@amarsuperstar: foi apenas no processo de adicionar essa informação :-)
Andy E

Existe uma maneira de saber o valor de "n", supondo que $ (this) seja o "n" é filho do pai?
Souvik Ghosh 21/09/16

1
@SouvikGhosh: o índice é passado como o primeiro argumento para a função de retorno de chamada each(). Verifique os documentos, vinculados na resposta acima.
Andy E

55

Também é possível iterar por todos os elementos em um contexto específico, não importando o quão profundamente aninhados eles estejam:

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

O segundo parâmetro $ ('# mydiv') que é passado para o seletor 'input' do jQuery é o contexto. Nesse caso, a cláusula each () irá percorrer todos os elementos de entrada no contêiner #mydiv, mesmo que não sejam filhos diretos de #mydiv.


1
Provavelmente, por aninhar esta solução funcionou para mim, enquanto a outra não. Por esse motivo, acho que essa normalmente é a melhor solução.
Arame3333 28/10/2015

Era isso que eu estava procurando. Alguma maneira de fazer json a partir de seus valores? Eu preciso postar todo o tema como json.
Muhammad Saqib

8

Se você precisar percorrer elementos filho recursivamente :

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: Neste exemplo, mostro os manipuladores de eventos registrados com um objeto.


5

Também pode ser feito desta maneira:

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

Isso itera através de todos os filhos e seu elemento com valor de índice pode ser acessado separadamente usando elemento e índice, respectivamente.


1

children () é um loop em si.

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

1

Eu não acho que você precisa usar each(), você pode usar o padrão para 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");
}

Dessa forma, você pode ter o padrão para recursos de loop como breake continuefunciona por padrão

também o debugging will be easier


Minha experiência é que $.each()é sempre mais lento que um forloop, e esta é a única resposta que o utiliza. A chave aqui é usar o .eq()para acessar o elemento real dentro da childrenmatriz e não a []notação bracket ( ).
ElPastor 19/02/19
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.