This is an experimental technology
Check the Browser compatibility table carefully before using this in production.
The ChildNode.before method inserts a set of Node or DOMString objects in the children list of this ChildNode's parent, just before this ChildNode. DOMString objects are inserted as equivalent Text nodes.
[Throws, Unscopable] void ChildNode.before((Node or DOMString)... nodes);
HierarchyRequestError: Node cannot be inserted at the specified point in the hierarchy.var parent = document.createElement("div");
var child = document.createElement("p");
parent.appendChild(child);
var span = document.createElement("span");
child.before(span);
console.log(parent.outerHTML);
// "<div><span></span><p></p></div>"
 var parent = document.createElement("div");
var child = document.createElement("p"); 
parent.appendChild(child);
child.before("Text"); 
console.log(parent.outerHTML);
// "<div>Text<p></p></div>" var parent = document.createElement("div");
var child = document.createElement("p"); 
parent.appendChild(child); 
var span = document.createElement("span");
child.before(span, "Text"); 
console.log(parent.outerHTML);
// "<div><span></span>Text<p></p></div>" ChildNode.before() is unscopableThe before() method is not scoped into the with statement. See Symbol.unscopables for more information.
with(node) { 
  before("foo");
}
// ReferenceError: before is not defined  You can polyfill the before() method in Internet Explorer 9 and higher with the following code:
// from: https://github.com/jserz/js_piece/blob/master/DOM/ChildNode/before()/before().md
(function (arr) {
  arr.forEach(function (item) {
    if (item.hasOwnProperty('before')) {
      return;
    }
    Object.defineProperty(item, 'before', {
      configurable: true,
      enumerable: true,
      writable: true,
      value: function before() {
        var argArr = Array.prototype.slice.call(arguments),
          docFrag = document.createDocumentFragment();
        
        argArr.forEach(function (argItem) {
          var isNode = argItem instanceof Node;
          docFrag.appendChild(isNode ? argItem : document.createTextNode(String(argItem)));
        });
        
        this.parentNode.insertBefore(docFrag, this);
      }
    });
  });
})([Element.prototype, CharacterData.prototype, DocumentType.prototype]); | Specification | Status | Comment | 
|---|---|---|
| DOM The definition of 'ChildNode.before()' in that specification.  |  Living Standard | Initial definition. | 
| Desktop | ||||||
|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | |
| Basic support | 54 | 17 | 49 | No | 39 | No | 
| Mobile | |||||||
|---|---|---|---|---|---|---|---|
| Android webview | Chrome for Android | Edge Mobile | Firefox for Android | Opera for Android | iOS Safari | Samsung Internet | |
| Basic support | 54 | 54 | No | 49 | 39 | No | 6.0 | 
ChildNode and ParentNode
ChildNode.after()ParentNode.append()Node.appendChild()Node.insertBefore()NodeList
    © 2005–2018 Mozilla Developer Network and individual contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
    https://developer.mozilla.org/en-US/docs/Web/API/ChildNode/before