Wrap an element with custom createElement in JavaScript

createElement function creates a wrapper element from a string. wrap function uses it to easily wrap a given element arround the wrapper string. The given wrapper can also be an HTMLElement.

const createElement = (value, doc = document) => {
    const element = doc.createElement("div");
    element.innerHTML = value;

    // we return only the first element
    return element.firstElementChild;
};

const wrap = (element, target) => {
  // element and target must be given to continue 
  if (!element || !target) return;

  let wrapper;

  // we give the possibility to wrap arround a given HTMLElement
  // otherwise we create it with `createElement` function
  if (typeof target === "object" && target.nodeType === 1) {
    wrapper = target;
  } else {
    wrapper = createElement(target);
  }

  element.parentNode.insertBefore(wrapper, element);
  wrapper.appendChild(element);

  return wrapper;
};

Let’s assume that we have this HTML structure

<div class="container">
  <div class="toto">
    Hello from toto
  </div>
</div>

We want to wrap what’s inside the div with toto class inside another div with titi class

const toto = document.querySelector(".toto");

// the wrapper can be an `HTMLElement`
wrap(toto, "<div class='titi'></div>")

Voilà 🎉

<div class="container">
  <div class="titi">
    <div class="toto">
      Hello from toto
    </div>
  </div>
</div>

Before you leave…
Thanks for reading! 😊