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)
- Delete any children of the 'body', just to make things cleaner
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.
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)
- Delete any children of the 'body', just to make things cleaner
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.
- Related: stackoverflow./q/31550944/1461424 – sampathsris Commented Apr 4, 2017 at 7:31
1 Answer
Reset to default 7This 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.
发布者:admin,转转请注明出处:http://www.yc00.com/questions/1741570930a4354199.html
评论列表(0条)