Skip to content

jQuery Ancestors

In the context of the Document Object Model (DOM), an ancestor refers to a parent, grandparent, great-grandparent, and so on, moving up the tree structure from a specific element.

jQuery provides powerful methods to navigate upwards through the DOM tree and select these ancestor elements.

Think of it like tracing your family tree backwards from yourself to your parents, grandparents, etc.

Three essential jQuery methods for finding ancestors are:

  • parent(): Selects the immediate (direct) parent of each selected element.
  • parents(): Selects all ancestors of each selected element, up to the document’s root (<html>). Can optionally be filtered by a selector.
  • parentsUntil(): Selects all ancestors between the selected element and a specified stopping point (exclusive of the stopping point).

The parent() method travels only one level up the DOM tree to find the direct parent.

Example: Find the direct parent <div> of a specific <span>.

// HTML: <div><p><span>Text</span></p></div>
// jQuery (assuming the script runs after DOM ready)
$(() => {
// Select the span
const spanElement = $('span');
// Get the direct parent (which is the <p> element)
const directParent = spanElement.parent();
directParent.css('border', '1px solid red'); // Example: Highlight the parent <p>
});

If multiple elements are selected initially, parent() returns a collection of their unique direct parents.

The parents() method travels all the way up the DOM tree from each selected element, collecting every ancestor until it reaches the <html> element.

Example: Find all ancestors of a <span>.

// HTML: <div id='grandparent'><p id='parent'><span>Text</span></p></div>
$(() => {
// Get all ancestors of the span
const allAncestors = $('span').parents();
// This selects the <p>, the <div>, the <body>, and the <html> elements.
allAncestors.addClass('highlight-ancestor'); // Example: Add a class to all ancestors
});

You can filter the results by providing a selector to parents(). This is very useful for finding a specific type of ancestor.

Example: Find only the ancestor <div> element(s) of a <span>.

$(() => {
// Get only the ancestor elements that are <div>s
const divAncestors = $('span').parents('div');
// This selects only the <div id='grandparent'>
divAncestors.css('background-color', 'lightblue'); // Example: Style the ancestor div
});

The parentsUntil() method finds all ancestors between the starting element and an element specified by a selector (the stopping point). The element matching the stopping selector is not included.

Example: Find all ancestors between a <span> and its ancestor <div id='grandparent'>.

// HTML: <div id='grandparent'><p id='parent'><span>Text</span></p></div>
$(() => {
// Get ancestors starting from <span> up to (but not including) <div id='grandparent'>
const intermediateAncestors = $('span').parentsUntil('#grandparent');
// This selects only the <p id='parent'> element.
intermediateAncestors.css('font-style', 'italic'); // Example: Style the intermediate parent
});

If the selector provided to parentsUntil() doesn’t match any ancestor, it behaves like parents() and goes all the way up to <html>.

For a complete overview of all jQuery Traversing methods, including descendants, siblings, and filtering, refer to the official jQuery documentation.