← Back to all snippets
JAVASCRIPT

Duplicating DOM Elements with cloneNode()

Learn to efficiently duplicate existing DOM elements, including their children and optionally their event listeners, using the JavaScript `cloneNode()` method for dynamic UI.

// Assume an existing element on the page
// <div id="originalContainer">
//     <p>Original Paragraph</p>
//     <button class="original-button">Click Me</button>
// </div>

const originalElement = document.getElementById('originalContainer');

if (originalElement) {
    // Create a shallow clone (only the element itself, no children)
    const shallowClone = originalElement.cloneNode(false);
    shallowClone.id = 'shallowClone'; // Change ID to avoid duplicates
    console.log('Shallow Clone:', shallowClone.outerHTML);
    document.body.appendChild(shallowClone); // Append to see it

    // Create a deep clone (element and all its descendants)
    const deepClone = originalElement.cloneNode(true);
    deepClone.id = 'deepClone'; // Change ID
    deepClone.querySelector('p').textContent = 'Cloned Paragraph'; // Modify cloned content
    deepClone.querySelector('.original-button').addEventListener('click', () => {
        alert('Deep clone button clicked!');
    }); // Add new event listener to cloned button
    console.log('Deep Clone:', deepClone.outerHTML);
    document.body.appendChild(deepClone); // Append to see it

    // Note: Event listeners attached via addEventListener are generally NOT copied by cloneNode.
    // You usually need to re-attach them to the cloned element's children.
} else {
    console.error('Original element #originalContainer not found.');
}
How it works: The `cloneNode()` method creates a duplicate of a node. When `true` is passed as an argument, it performs a deep clone, copying the node and all its descendants. When `false` (or no argument), it performs a shallow clone, copying only the node itself. It's crucial to note that `cloneNode()` does not copy event listeners attached via `addEventListener()`, which must be re-attached manually to the cloned elements if desired. It's ideal for replicating complex UI components or templates.

Need help integrating this into your project?

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

Hire DigitalCodeLabs