In Javascript, when I set the outerHTML of an element in the DOM to a new value (to change it into a different element, for example), its 'parentNode' property gets set to 'null'. Why? I would expect it to remain at whatever value it was at before the outerHTML change.
I guess that the DOM is creating a new object from parsing the 'outerHTML' string and using it to replace the original object. If this is the case, is there a method to retrieve that newly created object?
Steps to reproduce (tested on Linux Chrome & Linux Firefox)
Open a clean window in your browser,
Open the dev console (F12, probably)
Take a look at the page DOM (Element tab in Chrome, Inspector in Firefox)
Open the console and type:
obj1 = document.createElement('div')
obj1.id = '1'
document.body.appendChild(obj1);
obj1.parentNode
- Should write the 'body' HTML to the console.
obj1.outerHTML = "<div id='2'></div>"
obj1.parentNode
- Now writes 'null' to the console.
Document and DocumentFragment nodes can never have a parent, so parentNode will always return null . It also returns null if the node has just been created and is not yet attached to the tree.
The outerHTML attribute of the Element DOM interface gets the serialized HTML fragment describing the element including its descendants. It can also be set to replace the element with nodes parsed from the given string.
The outerHTML is the HTML of an element including the element itself. Use the outerHTML when you want to completely replace an element and its contents. Use innerHTML when you only want to replace the contents of the element.
The outerHTML is the HTML of an element including the element itself. Contrast this with the innerHTML of the element, which is the HTML contained within an elements opening and closing tags. By definition, elements without both opening and closing tags do not have innerHTML.
This is as per doc
Also, while the element will be replaced in the document, the variable whose outerHTML property was set will still hold a reference to the original element:
which means obj1
in your code is still referring to original element which has been detached from the DOM tree by now.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With