← Back to all snippets
JAVASCRIPT

Efficiently Traverse DOM to Find Related Elements

Learn how to navigate the Document Object Model (DOM) using JavaScript to find parent, child, or sibling elements relative to a given starting element.

const DOMNavigator = {
    getParent: (element, selector = null) => {
        if (!element || !element.parentElement) return null;
        return selector ? element.closest(selector) : element.parentElement;
    },

    getChildren: (element, selector = null) => {
        if (!element) return [];
        return selector ? Array.from(element.querySelectorAll(`:scope > ${selector}`)) : Array.from(element.children);
    },

    getSiblings: (element, selector = null) => {
        if (!element || !element.parentElement) return [];
        const siblings = Array.from(element.parentElement.children).filter(child => child !== element);
        return selector ? siblings.filter(child => child.matches(selector)) : siblings;
    },

    getPreviousSibling: (element, selector = null) => {
        if (!element) return null;
        let sibling = element.previousElementSibling;
        while (sibling) {
            if (!selector || sibling.matches(selector)) return sibling;
            sibling = sibling.previousElementSibling;
        }
        return null;
    },

    getNextSibling: (element, selector = null) => {
        if (!element) return null;
        let sibling = element.nextElementSibling;
        while (sibling) {
            if (!selector || sibling.matches(selector)) return sibling;
            sibling = sibling.nextElementSibling;
        }
        return null;
    }
};

// Example Usage:
// <div id="grandparent">
//     <div id="parent1" class="container">
//         <p class="text-node">First Child</p>
//         <span id="target" class="highlight">Target Element</span>
//         <a href="#" class="link-node">Link</a>
//     </div>
//     <div id="parent2" class="container">Sibling Parent</div>
// </div>

// const targetElement = document.getElementById('target');
// console.log('Parent of target:', DOMNavigator.getParent(targetElement));
// console.log('Specific parent (.container):', DOMNavigator.getParent(targetElement, '.container'));
// console.log('Children of target parent:', DOMNavigator.getChildren(targetElement.parentElement));
// console.log('Specific children of target parent (.text-node):', DOMNavigator.getChildren(targetElement.parentElement, '.text-node'));
// console.log('Siblings of target:', DOMNavigator.getSiblings(targetElement));
// console.log('Previous sibling of target:', DOMNavigator.getPreviousSibling(targetElement));
// console.log('Next sibling of target:', DOMNavigator.getNextSibling(targetElement, '.link-node'));
How it works: This `DOMNavigator` object provides utility methods for comprehensive DOM traversal. It allows you to find an element's parent (optionally matching a selector), all its children (also optionally filtered by a selector), all its siblings, and specific previous or next sibling elements, enhancing your ability to manipulate related elements on the page.

Need help integrating this into your project?

Our team of expert developers can help you build your custom application from scratch.

Hire DigitalCodeLabs