/* Updated w/ insertAdjacentElement @author Dan Levy @justsml 2016-06-23 Credit: @lyleunderwood - afterend patch/fix 2011-10-10 By Eli Grey, http://eligrey.com Public Domain. NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. */ function insertAdjacentElement(position, elem) { const _this = this; const parent = this.parentNode; let node, first; switch (position.toLowerCase()) { case 'beforebegin': while ((node = elem.firstChild)) { parent.insertBefore(node, _this); } break; case 'afterbegin': first = _this.firstChild; while ((node = elem.lastChild)) { first = _this.insertBefore(node, first); } break; case 'beforeend': while ((node = elem.firstChild)) { _this.appendChild(node); } break; case 'afterend': parent.insertBefore(elem, _this.nextSibling); break; } return elem; } // Method missing in Firefox < 48 if (!HTMLElement.prototype.insertAdjacentElement) { HTMLElement.prototype.insertAdjacentElement = insertAdjacentElement; }