window.onload = function() { // Force a reflow before any changes. document.body.clientWidth; var elems = document.querySelectorAll('[data-insert]'); Array.from(elems).forEach(function(e) { var parent, ref; switch (e.dataset.insert) { case 'start': parent = e; ref = e.firstChild; break; case 'end': parent = e; ref = null; break; case 'before': parent = e.parentNode; ref = e; break; case 'after': parent = e.parentNode; ref = e.nextSibling; break; } var elem, textnode; if ('text' in e.dataset) { textnode = document.createTextNode(e.dataset.text); } if ('tag' in e.dataset) { elem = document.createElement(e.dataset.tag); if (textnode) { elem.appendChild(textnode); } } parent.insertBefore(elem ? elem : textnode, ref); }); };