Calling insertBefore on Elements
If the current node is an element, calling insertBefore has the following results, depending on the value of the newChild parameter.
Node type passed in newChild
NODE_CDATA_SECTION, NODE_COMMENT, NODE_ELEMENT, NODE_ENTITY_REFERENCE, NODE_TEXT, NODE_PROCESSING_INSTRUCTION
Inserts newChild and returns newChild.
NODE_ATTRIBUTE, NODE_DOCUMENT, NODE_DOCUMENT_TYPE, NODE_ENTITY, NODE_NOTATION
Returns an error. These node types cannot be children of an element node.
Inserts the children of the document fragment (newChild) and returns newChild.
Returns an error. Although the child nodes of an entity reference are the expanded entity, the children cannot be modified.
When elements are added as children to other elements, they introduce their own namespace scoping. That is, if the element is from a default namespace, the default has scope beginning with the element being added.
If an entity reference is being added as a child to an element or document fragment, the namespace declaration of the entity reference is added to the containing element.