Как перебирать дочерние элементы div с помощью jQuery?

У меня есть div, и в нем есть несколько входных элементов ... Я хотел бы перебрать каждый из этих элементов. Идеи?


person Shamoon    schedule 11.06.2010    source источник


Ответы (8)


Используйте children() и _ 2_, при желании вы можете передать селектор в children

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

Вы также можете просто использовать непосредственный дочерний селектор:

$('#mydiv > input').each(function () { /* ... */ });
person Andy E    schedule 11.06.2010
comment
затем используйте $ (this) внутри замыкания для доступа к текущему элементу в цикле. - person amarsuperstar; 11.06.2010
comment
@amarsuperstar: только что добавлял эту информацию :-) - person Andy E; 11.06.2010
comment
Есть ли способ узнать значение n, если предположить, что $ (this) является n-м потомком родителя? - person Souvik Ghosh; 21.09.2016
comment
@SouvikGhosh: индекс передается в качестве первого аргумента функции обратного вызова для each(). Проверьте документы, ссылки на которые приведены в ответе выше. - person Andy E; 22.09.2016

Также можно перебирать все элементы в определенном контексте, независимо от того, насколько глубоко они вложены:

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

Второй параметр $ ('# mydiv'), который передается селектору ввода jQuery, является контекстом. В этом случае предложение each () будет перебирать все входные элементы в контейнере #mydiv, даже если они не являются прямыми дочерними элементами #mydiv.

person Liquinaut    schedule 07.02.2014
comment
Вероятно, из-за вложенности это решение сработало для меня, а другое - нет. По этой причине я думаю, что это обычно лучшее решение. - person arame3333; 28.10.2015
comment
Это то, что я искал. Любой способ сделать json из их значений? Мне нужно опубликовать всю тему как json. - person Muhammad Saqib; 19.06.2018
comment
Работает отлично! Что, если мне нужны все данные и выбрать элементы? - person Johannes Pertl; 07.06.2021

Если вам нужно перебрать дочерние элементы рекурсивно:

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"));   

ПРИМЕЧАНИЕ. В этом примере я показываю обработчики событий, зарегистрированные для объекта.

person tomloprod    schedule 30.10.2016

$('#myDiv').children().each( (index, element) => {
    console.log(index);     // children's index
    console.log(element);   // children's element
 });

Это выполняет итерацию по всем дочерним элементам, и к их элементу со значением индекса можно получить доступ отдельно, используя element и index соответственно.

person Surya Swanoff    schedule 17.03.2019

Это можно сделать и так:

$('input', '#div').each(function () {
    console.log($(this)); //log every element found to console output
});
person Umar Asghar    schedule 08.02.2017

Я не думаю, что вам нужно использовать each(), вы можете использовать стандартный цикл for

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");
}

таким образом вы можете использовать стандартные функции цикла, такие как break и continue, работающие по умолчанию

также debugging will be easier

person Basheer AL-MOMANI    schedule 13.12.2018
comment
По моему опыту, $.each() всегда медленнее, чем цикл for, и это единственный ответ, который его использует. Ключевым моментом здесь является использование .eq() для доступа к фактическому элементу в массиве children, а не нотации скобок ([]). - person elPastor; 19.02.2019

children () - это сам по себе цикл.

$('.element').children().animate({
'opacity':'0'
});
person Dan185    schedule 26.06.2018

Он работает с .attr ('value') для атрибутов элементов

$("#element div").each(function() {
   $(this).attr('value')
});
person KarolSVK    schedule 03.05.2021