JAVASCRIPT

Insert an Element Before or After a Specific Sibling Element

Control precise element placement within the DOM by using JavaScript's `insertBefore()` or `insertAdjacentElement()` to add new content relative to an existing sibling.

/**
 * Inserts a new HTML element relative to a reference element.
 * @param {HTMLElement} newElement - The element to insert.
 * @param {HTMLElement} referenceElement - The element relative to which `newElement` will be inserted.
 * @param {'before'|'after'} position - Whether to insert 'before' or 'after' the reference element.
 */
function insertElementRelative(newElement, referenceElement, position) {
  if (!newElement || !referenceElement || !referenceElement.parentNode) {
    console.error('Invalid elements provided for relative insertion.');
    return;
  }

  if (position === 'before') {
    referenceElement.parentNode.insertBefore(newElement, referenceElement);
    console.log('Inserted element before reference:', newElement, referenceElement);
  } else if (position === 'after') {
    // Using insertAdjacentElement for 'after' for conciseness
    // Alternatively: referenceElement.parentNode.insertBefore(newElement, referenceElement.nextSibling);
    referenceElement.insertAdjacentElement('afterend', newElement);
    console.log('Inserted element after reference:', newElement, referenceElement);
  } else {
    console.warn(`Invalid position: ${position}. Use 'before' or 'after'.`);
  }
}

// Example usage:
// Assume a list item with id='item2' exists in an unordered list.
// const item2 = document.getElementById('item2');
// const newListItemBefore = document.createElement('li');
// newListItemBefore.textContent = 'New Item (before item 2)';
// const newListItemAfter = document.createElement('li');
// newListItemAfter.textContent = 'New Item (after item 2)';

// if (item2) {
//   insertElementRelative(newListItemBefore, item2, 'before');
//   insertElementRelative(newListItemAfter, item2, 'after');
// }
How it works: This snippet provides a function to insert a new HTML element either directly before or directly after a specified reference sibling element. For 'before' insertion, `parentNode.insertBefore(newElement, referenceElement)` is used. For 'after' insertion, the more modern `insertAdjacentElement('afterend', newElement)` is utilized, offering a clear and efficient way to place elements precisely within the DOM without direct manipulation of `nextSibling`.

Need help integrating this into your project?

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

Hire DigitalCodeLabs