instance method Element#down

View source on GitHub →

Element#down([expression[, index = 0]]) → Element
Element#down([index = 0]) → Element
  • expression (String) – A CSS selector.

Returns element's first descendant (or the Nth descendant, if index is specified) that matches expression. If no expression is provided, all descendants are considered. If no descendant matches these criteria, undefined is returned.

More information

The Element.down method is part of Prototype's ultimate DOM traversal toolkit (check out Element.up, Element.next and Element.previous for some more Prototypish niceness). It allows precise index-based and/or CSS rule-based selection of any of the element's descendants.

As it totally ignores text nodes (it only returns elements), you don't have to worry about whitespace nodes.

And as an added bonus, all elements returned are already extended (see Element.extend) allowing chaining:

$(element).down(1).next('li', 2).hide();

Walking the DOM has never been that easy!

Arguments

If no arguments are passed, element's first descendant is returned (this is similar to calling firstChild except Element.down returns an extended element.

If index is defined, element's corresponding descendant is returned. (This is equivalent to selecting an element from the array of elements returned by the method Element.descendants.) Note that the first element has an index of 0.

If expression is defined, Element.down will return the first descendant that matches it. This is a great way to grab the first item in a list for example (just pass in 'li' as the method's first argument).

If both expression and index are defined, Element.down will collect all the descendants matching the given CSS expression and will return the one at the specified index.

In all of the above cases, if no descendant is found, undefined will be returned.

Examples
<ul id="fruits">
  <li id="apples">
    <ul>
      <li id="golden-delicious">Golden Delicious</li>
      <li id="mutsu" class="yummy">Mutsu</li>
      <li id="mcintosh" class="yummy">McIntosh</li>
      <li id="ida-red">Ida Red</li>
    </ul>
  </li>
</ul>

Get the first descendant of "#fruites":

$('fruits').down();
// or:
$('fruits').down(0);
// -> li#apples

Get the third descendant of "#fruits":

$('fruits').down(3);
// -> li#golden-delicious

Get the first descendant of "#apples" with the node name "li":

$('apples').down('li');
// -> li#golden-delicious

Get the first descendant of "#apples" with the node name "li" and the class name "yummy":

$('apples').down('li.yummy');
// -> li#mutsu

Get the second descendant of "#fruits" with the class name "yummy":

$('fruits').down('.yummy', 1);
// -> li#mcintosh

Try to get the ninety-ninth descendant of "#fruits":

$('fruits').down(99);
// -> undefined

This method can be called either as an instance method or as a generic method. If calling as a generic, pass the instance in as the first argument.