У меня есть div, и в нем есть несколько входных элементов ... Я хотел бы перебрать каждый из этих элементов. Идеи?
Как перебирать дочерние элементы div с помощью jQuery?
Ответы (8)
Используйте children()
и _ 2_, при желании вы можете передать селектор в children
$('#mydiv').children('input').each(function () {
alert(this.value); // "this" is the current element in the loop
});
Вы также можете просто использовать непосредственный дочерний селектор:
$('#mydiv > input').each(function () { /* ... */ });
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.
Если вам нужно перебрать дочерние элементы рекурсивно:
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"));
ПРИМЕЧАНИЕ. В этом примере я показываю обработчики событий, зарегистрированные для объекта.
$('#myDiv').children().each( (index, element) => {
console.log(index); // children's index
console.log(element); // children's element
});
Это выполняет итерацию по всем дочерним элементам, и к их элементу со значением индекса можно получить доступ отдельно, используя element и index соответственно.
Это можно сделать и так:
$('input', '#div').each(function () {
console.log($(this)); //log every element found to console output
});
Я не думаю, что вам нужно использовать 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
$.each()
всегда медленнее, чем цикл for
, и это единственный ответ, который его использует. Ключевым моментом здесь является использование .eq()
для доступа к фактическому элементу в массиве children
, а не нотации скобок ([]
).
- person elPastor; 19.02.2019
children () - это сам по себе цикл.
$('.element').children().animate({
'opacity':'0'
});
Он работает с .attr ('value') для атрибутов элементов
$("#element div").each(function() {
$(this).attr('value')
});