jQuery API

.children()

.children( [selector] ) Returns: jQuery

Description: Get the children of each element in the set of matched elements, optionally filtered by a selector.

  • version added: 1.0.children( [selector] )

    selectorA string containing a selector expression to match elements against.

Given a jQuery object that represents a set of DOM elements, the .children() method allows us to search through the immediate children of these elements in the DOM tree and construct a new jQuery object from the matching elements. The .find() and .children() methods are similar, except that the latter only travels a single level down the DOM tree. Note also that like most jQuery methods, .children() does not return text nodes; to get all children including text and comment nodes, use .contents().

The method optionally accepts a selector expression of the same type that we can pass to the $() function. If the selector is supplied, the elements will be filtered by testing whether they match it.

Consider a page with a basic nested list on it:

<ul class="level-1">
  <li class="item-i">I</li>
  <li class="item-ii">II
    <ul class="level-2">
      <li class="item-a">A</li>
      <li class="item-b">B
        <ul class="level-3">
          <li class="item-1">1</li>
          <li class="item-2">2</li>
          <li class="item-3">3</li>
        </ul>
      </li>
      <li class="item-c">C</li>
    </ul>
  </li>
  <li class="item-iii">III</li>
</ul>

If we begin at the level-2 list, we can find its children:

$('ul.level-2').children().css('background-color', 'red');

The result of this call is a red background behind items A, B, and C. Since we do not supply a selector expression, all of the children are part of the returned jQuery object. If we had supplied one, only the matching items among these three would be included.

Examples:

Example: Find all children of the clicked element.

<!DOCTYPE html>
<html>
<head>
  <style>
  body { font-size:16px; font-weight:bolder; }
  div { width:130px; height:82px; margin:10px; float:left;
        border:1px solid blue; padding:4px; }
  #container { width:auto; height:105px; margin:0; float:none;
        border:none; }
  .hilite { border-color:red; }
  #results { display:block; color:red; }
  p { margin:10px; border:1px solid transparent; }
  span { color:blue; border:1px solid transparent; }
  input { width:100px; }
  em { border:1px solid transparent; }
  a { border:1px solid transparent; }
  b { border:1px solid transparent; }
  button { border:1px solid transparent; }
  </style>
  <script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
  <div id="container">

    <div>
      <p>This <span>is the <em>way</em> we</span> 
      write <em>the</em> demo,</p>

    </div>
    <div>
      <a href="#"><b>w</b>rit<b>e</b></a> the <span>demo,</span> <button>write 
      the</button> demo,
    </div>

    <div>
      This <span>the way we <em>write</em> the <em>demo</em> so</span>

      <input type="text" value="early" /> in
    </div>
    <p>
      <span>t</span>he <span>m</span>orning.
      <span id="results">Found <span>0</span> children in <span>TAG</span>.</span>

    </p>
  </div>
<script>

    $("#container").click(function (e) {
      $("*").removeClass("hilite");
      var $kids = $(e.target).children();
      var len = $kids.addClass("hilite").length;

      $("#results span:first").text(len);
      $("#results span:last").text(e.target.tagName);

      e.preventDefault();
      return false;
    });
</script>

</body>
</html>

Demo:

Example: Find all children of each div.

<!DOCTYPE html>
<html>
<head>
  <style>
  body { font-size:16px; font-weight:bolder; }
  span { color:blue; }
  p { margin:5px 0; }
  </style>
  <script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
  <p>Hello (this is a paragraph)</p>

  <div><span>Hello Again (this span is a child of the a div)</span></div>
  <p>And <span>Again</span> (in another paragraph)</p>

  <div>And One Last <span>Time</span> (most text directly in a div)</div>
<script>$("div").children().css("border-bottom", "3px double red");</script>

</body>
</html>

Demo:

Example: Find all children with a class "selected" of each div.

<!DOCTYPE html>
<html>
<head>
  <style>

  body { font-size:16px; font-weight:bolder; }
  p { margin:5px 0; }
  </style>
  <script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
  <div>
    <span>Hello</span>
    <p class="selected">Hello Again</p>
    <div class="selected">And Again</div>

    <p>And One Last Time</p>
  </div>
<script>$("div").children(".selected").css("color", "blue");</script>

</body>
</html>

Demo:

Support and Contributions

Need help with .children() or have a question about it? Visit the jQuery Forum or the #jquery channel on irc.freenode.net.

Think you've discovered a jQuery bug related to .children()? Report it to the jQuery core team.

Found a problem with this documentation? Report it to the jQuery API team.

* All fields are required
  • http://twitter.com/possibilities Mike Bannister

    Really curious why people sometimes use a dollar sign in front of a variable name like the example above:

    var $kids = $(e.target).children();

    What does the $ in $kids signify?

  • Darren

    they do it because some languages require a $ before variables ie php

  • http://www.learningjquery.com/ Karl Swedberg

    Umm, no. They do it because it has become a convention of sorts. It acts as a reminder that the variable is storing a jQuery object.

  • Miles

    Both of you may be wrong; Yes the $(e.target).children(); stands for the stored jQuery object, but the var $kids isn’t. It’s just a variable name, nothing more nothing less. It is not linked to php because php cannot read JS variables like that.

    Miles

  • http://scott-christopherson.com Scott Christopherson

    $(e.target).children() returns a jQuery object and gets stored in var $kids. The dollar sign isn’t required, but just as Karl said, it’s just there to serve as a reminder that $kids contains a jQuery object. It’s just convention and coder style.

  • Matt

    I have also used $ signs to represent that it is a Jquery specific variable, does not have to b e used this way. But it is a good convention

  • John

    does children return true or false?

    if not how do i check whether a div has a certain child or not?

  • shawndube

    There is a length property on the object returned. Check the length..

  • Manish Sharma

    that’s right! I believe whole thing boils down to the fact, how gave some name to something. more you make it logical more convenient it will for you to use it, specially in large code base, so $ sign make absolute sense.. i even use it for this i.e var $this = $(this); it not only save me the brackets ;-) but its easier to use it further in code

  • Antony

    what is the output of .children()? Is it an array of jquery objects?

  • http://www.messagebase.net Ben Kimball

    Yes. You can check .children().length to find out how many children (or 0 == no children, although you will still get back a jquery array)

  • http://www.learningjquery.com/ Karl Swedberg

    It returns a new jQuery object, which is an array-like object. The return value (“jQuery”) is linked above to this: http://docs.jquery.com/Types#jQuery

  • Akim_v

    $(this).children([selector]) call returns same elemnt (e.m. $(this) ), but NOT children element.

  • Vinh.Luan

    how do I access an attribute of a children?

  • http://pulse.yahoo.com/_SDY4VKKDNQ5OZQFDCSQ44KGPDA vishnu v

    how do i get the children of the particular div content

    var $kids = $(e.target).children();

    How i go through the $kids
    object

    Help Me Pls

  • http://twitter.com/syn4k Noor Sulayman

    $(e.target).children().each(function(){
    var kid = $(this);
    console.log(kid, kid.attr('id'), kid.attr('class'));
    });
    Assumes you have firebug and the console is active

  • http://www.learningjquery.com/ Karl Swedberg

    $(e.target) will not have any children.

  • garek007

    There seems to be a problem with IE 8 and the children() element. I have some code that works fine in IE 7, 6 and firefox, but not in IE 8.

    I have played with the code, removed items until I figured out that it is the children part that is screwing things up.

    I can't seem to use “contents” either. I'm not sure if it's the way the line breaks down with all the parenthesis or what, but it ain't working. siblings works, but not children or contents. I'm trying to use the THIS property. Maybe someone can suggest an alternate method?

    $('div#main_menu ul li').mouseover(
    function($e){
    $e.preventDefault();
    $(this > 'ul.LVL1').addClass('fuckoff');
    $(this).siblings().children('ul.LVL1').slideUp('fast');

    });

  • Coolrahulis

    how can I get say all the tables in a div
    $(“#div1″).children(“table”) is valid?

  • Fernce Borcena

    use .children().size() so that you get the length

  • sushil

    how can aplly children on ul

  • Fernce Borcena

    use .children().size() so that you get the length