Count immediate child div elements using jQuery
JavascriptJqueryDomJquery SelectorsJavascript Problem Overview
I have the following HTML node structure:
<div id="foo">
<div id="bar"></div>
<div id="baz">
<div id="biz"></div>
</div>
<span></span>
</div>
How do I count the number of immediate children of foo
, that are of type div
? In the example above, the result should be two (bar
and baz
).
Javascript Solutions
Solution 1 - Javascript
$("#foo > div").length
Direct children of the element with the id 'foo' which are divs. Then retrieving the size of the wrapped set produced.
Solution 2 - Javascript
I recommend using $('#foo').children().size()
for better performance.
I've created a [jsperf][1] test to see the speed difference and the children()
method beaten the child selector (#foo > div) approach by at least 60% in Chrome (canary build v15) 20-30% in Firefox (v4).
By the way, needless to say, these two approaches produce same results (in this case, 1000).
[Update] I've updated the test to include the size() vs length test, and they doesn't make much difference (result: length
usage is slightly faster (2%) than size()
)
[Update] Due to the incorrect markup seen in the OP (before 'markup validated' update by me), both $("#foo > div").length
& $('#foo').children().length
resulted the same ([jsfiddle][2]). But for correct answer to get ONLY 'div' children, one SHOULD use child selector for correct & better performance
[1]: http://jsperf.com/jquery-child-ele-size "jsperf test" [2]: http://jsfiddle.net/LavMc/ "jsfiddle test"
Solution 3 - Javascript
$("#foo > div")
selects all divs that are immediate descendants of #foo
once you have the set of children you can either use the size function:
$("#foo > div").size()
or you can use
$("#foo > div").length
Both will return you the same result
Solution 4 - Javascript
$('#foo').children('div').length
Solution 5 - Javascript
In response to mrCoders answer using jsperf why not just use the dom node ?
var $foo = $('#foo');
var count = $foo[0].childElementCount
You can try the test here: http://jsperf.com/jquery-child-ele-size/7
This method gets 46,095 op/s while the other methods at best 2000 op/s
Solution 6 - Javascript
$('#foo > div').size()
Solution 7 - Javascript
$("#foo > div").length
jQuery has a .size() function which will return the number of times that an element appears but, as specified in the jQuery documentation, it is slower and returns the same value as the .length property so it is best to simply use the .length property. From here: http://www.electrictoolbox.com/get-total-number-matched-elements-jquery/
Solution 8 - Javascript
var divss = 0;
$(function(){
$("#foo div").each(function(){
divss++;
});
console.log(divss);
});
<div id="foo">
<div id="bar" class="1"></div>
<div id="baz" class="1"></div>
<div id="bam" class="1"></div>
</div>
Solution 9 - Javascript
With the most recent version of jquery, you can use $("#superpics div").children().length
.
Solution 10 - Javascript
var n_numTabs = $("#superpics div").size();
or
var n_numTabs = $("#superpics div").length;
As was already said, both return the same result.
But the size() function is more jQuery "P.C".
I had a similar problem with my page.
For now on, just omit the > and it should work fine.
Solution 11 - Javascript
$("div", "#superpics").size();
Solution 12 - Javascript
Try this for immediate child elements of type div
$("#foo > div")[0].children.length