Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Count how many elements in a div

People also ask

How do you count the number of elements in a div?

To count all elements inside a div elements, we use find() method and length property.

How do I count elements in HTML?

To count all HTML elements, we use length property. The length property is used to count number of the elements of the jQuery object.


If you want the number of descendants, you can use

var element = document.getElementById("theElementId");
var numberOfChildren = element.getElementsByTagName('*').length

But if you want the number of immediate children, use

element.childElementCount

See browser support here: http://help.dottoro.com/ljsfamht.php

or

element.children.length

See browser support here: https://developer.mozilla.org/en-US/docs/DOM/Element.children#Browser_compatibility


You can use this function, it will avoid counting TextNodes. You can choose to count the children of the children (i.e. recursive)

function getCount(parent, getChildrensChildren){
    var relevantChildren = 0;
    var children = parent.childNodes.length;
    for(var i=0; i < children; i++){
        if(parent.childNodes[i].nodeType != 3){
            if(getChildrensChildren)
                relevantChildren += getCount(parent.childNodes[i],true);
            relevantChildren++;
        }
    }
    return relevantChildren;
}

Usage:

var element = document.getElementById("someElement");
alert(getCount(element, false)); // Simply one level
alert(getCount(element, true)); // Get all child node count

Try it out here: JS Fiddle


Without jQuery:

var element = document.getElementById("theElementId");
var numberOfChildren = element.children.length

With jQuery:

var $element = $(cssSelectocr);
var numberOfChildren = $element.children().length;

Both of this return only immediate children.


With jQuery; checks only for spans inside a div:

JSFiddle

$(function(){
    var numberOfSpans = $('#myDiv').children('span').length;
    alert(numberOfSpans);
})();​

With jQuery you can do like this:

var count = $('div').children().length;
alert( count );​​​

Here's a Fiddle: http://jsfiddle.net/dryYq/1/


To count all descendant elements including nested elements in plain javascript, there are several options:

The simplest is probably this:

var count = parentElement.getElementsByTagName("*").length;

If you wanted the freedom to add more logic around what you count, you can recurse through the local tree like this:

function countDescendantElements(parent) {
    var node = parent.firstChild, cnt = 0;
    while (node) {
        if (node.nodeType === 1) {
            cnt++;
            cnt += countDescendantElements(node);
        }
        node = node.nextSibling;
    }
    return(cnt);
}

Working Demo: http://jsfiddle.net/jfriend00/kD73F/

If you just wanted to count direct children (not deeper levels) and only wanted to count element nodes (not text or comment nodes) and wanted wide browser support, you could do this:

function countChildElements(parent) {
    var children = parent.childNodes, cnt = 0;
    for (var i = 0, len = children.length; i < len; i++) {
        if (children[i].nodeType === 1) {
            ++cnt;
        }
    }
    return(cnt);
}