JAVASCRIPT

Clone and Customize Existing DOM Elements

Understand how to create a deep copy of an existing DOM element, modify its content or attributes, and append it to the document, useful for templating dynamic UI components.

function cloneAndCustomizeElement(originalElementId, targetParentId, modifications = {}) {
  const originalElement = document.getElementById(originalElementId);
  const targetParent = document.getElementById(targetParentId);

  if (!originalElement) {
    console.error('Original element not found:', originalElementId);
    return null;
  }
  if (!targetParent) {
    console.error('Target parent element not found:', targetParentId);
    return null;
  }

  // Clone the original element deeply (true means clone all children too)
  const clonedElement = originalElement.cloneNode(true);

  // Apply modifications
  if (modifications.id) {
    clonedElement.id = modifications.id;
  } else {
    // Ensure cloned element has a unique ID if original had one
    clonedElement.removeAttribute('id');
  }

  if (modifications.textContent) {
    clonedElement.textContent = modifications.textContent;
  }
  if (modifications.innerHTML) {
    clonedElement.innerHTML = modifications.innerHTML;
  }
  if (modifications.className) {
    clonedElement.className = modifications.className;
  }
  if (modifications.attributes) {
    for (const attrName in modifications.attributes) {
      clonedElement.setAttribute(attrName, modifications.attributes[attrName]);
    }
  }

  // Append the customized clone to the target parent
  targetParent.appendChild(clonedElement);
  console.log(`Cloned #${originalElementId} and appended to #${targetParentId}`);
  return clonedElement;
}

// Example Usage:
// HTML:
// <div id="templateCard" style="border: 1px solid #ccc; padding: 10px; margin-bottom: 5px;">
//   <h3>Original Card Title</h3>
//   <p class="description">This is the description for the original card.</p>
//   <button data-action="view">View Details</button>
// </div>
// <div id="containerForClones"></div>

// Clone and customize with new ID and text
// const newCard1 = cloneAndCustomizeElement('templateCard', 'containerForClones', {
//   id: 'productCard_1',
//   innerHTML: '<h3>Product 1</h3><p class="description">Details for product one.</p><button data-action="buy">Buy Now</button>'
// });

// Clone again with different content
// const newCard2 = cloneAndCustomizeElement('templateCard', 'containerForClones', {
//   id: 'productCard_2',
//   textContent: 'Another Product Card (all text removed except this)', // Overwrites all inner HTML
//   attributes: {
//     'data-product-id': 'xyz789'
//   }
// });
How it works: The `cloneNode()` method is used to create a duplicate of an existing DOM element. Passing `true` as an argument performs a "deep clone," meaning all child nodes and their content are also copied. This is extremely useful for templating, where you have a base structure (e.g., a card, a list item) that you want to replicate multiple times with slight modifications. After cloning, you can easily update the clone's `id`, `textContent`, `innerHTML`, `className`, or any other attribute before appending it to the document, saving you from recreating complex structures from scratch.

Need help integrating this into your project?

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

Hire DigitalCodeLabs