I have a div and it has several input elements in it... I'd like to iterate through each of those elements. Ideas?
8 Answers
Use children()
and each()
, you can optionally pass a selector to children
$('#parentid').children('.childclass').each(function () {
alert(this.value); // "this" is the current element in the loop
});
You could also just use the immediate child selector:
$('#mydiv > input').each(function () { /* ... */ });
-
79then use $(this) within the closure to access the "current" item in the loop. – amarsuperstar Jun 11 '10 at 16:15
-
1@amarsuperstar: was just in the process of adding that information :-) – Andy E Jun 11 '10 at 16:17
-
Is there a way to know the value of "n", assuming $(this) is the "n"th child of the parent? – Souvik Ghosh Sep 21 '16 at 16:15
-
1@SouvikGhosh: the index is passed as the first argument to the callback function for `each()`. Check the docs, linked in the answer above. – Andy E Sep 22 '16 at 08:33
It is also possible to iterate through all elements within a specific context, no mattter how deeply nested they are:
$('input', $('#mydiv')).each(function () {
console.log($(this)); //log every element found to console output
});
The second parameter $('#mydiv') which is passed to the jQuery 'input' Selector is the context. In this case the each() clause will iterate through all input elements within the #mydiv container, even if they are not direct children of #mydiv.

- 3,759
- 1
- 21
- 17
-
1Probably because of nesting this solution worked for me whilst the other one did not. For that reason I would think that this is normally the better solution. – arame3333 Oct 28 '15 at 07:56
-
This is what I was looking for. Any way to make json from their values? I need to post all of theme as json. – Muhammad Saqib Jun 19 '18 at 06:35
-
-
You can select multiple elements through a comma separated list: `$('input,select', $('#mydiv'))` – Liquinaut Aug 02 '21 at 14:05
If you need to loop through child elements recursively:
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"));
NOTE: In this example I show the events handlers registered with an object.

- 7,472
- 6
- 48
- 66
$('#myDiv').children().each( (index, element) => {
console.log(index); // children's index
console.log(element); // children's element
});
This iterates through all the children and their element with index value can be accessed separately using element and index respectively.

- 971
- 2
- 17
- 30
It can be done this way as well:
$('input', '#div').each(function () {
console.log($(this)); //log every element found to console output
});

- 11,391
- 14
- 81
- 114

- 3,808
- 1
- 36
- 32
I don't think that you need to use each()
, you can use standard for 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");
}
this way you can have the standard for loop features like break
and continue
works by default
also, the debugging will be easier

- 14,473
- 9
- 96
- 92
-
1My experience is that `$.each()` is always slower than a `for` loop, and this is the only answer that uses it. The key here is to use the `.eq()` to access the actual element within the `children` array and not bracket (`[]`) notation. – elPastor Feb 19 '19 at 14:58
children() is a loop in itself.
$('.element').children().animate({
'opacity':'0'
});

- 356
- 3
- 12
It's working with .attr('value'), for elements attributes
$("#element div").each(function() {
$(this).attr('value')
});

- 1
- 1
-
this is a 1:1 repeat of the answer from @UmarAsghar which is 4 years older – Henrik Mar 16 '22 at 07:59