这是交易 - 我在页面上有大量元素,我正在使用Javascript删除其中一些(this.parentNode.removeChild(this)),这是很好的.但是,如果我有一个引用此节点的变量,然后删除该节点,该变量不会丢失它的值!但是,如果我尝试对此元素执行一些其他操作,我会收到错误!
例:
var element = document.getElementById('ooolookatmeimanelement');
element.parentNode.removeChild(element);
alert(element);
Run Code Online (Sandbox Code Playgroud)
我仍然在警报中得到"[Object HTMLblahblahblah]",而不是null或undefined - 任何人都有任何想法我如何检查节点是否已被删除?它可能非常简单,我忘了!
如果删除节点,也要删除引用.例如,在您的代码中,分配null给element:
element = null;
Run Code Online (Sandbox Code Playgroud)
或者,如果这不可能,您可以随时检查值parentNode.null如果元素不是DOM的一部分,它应该给出:
if(element.parentNode === null) {
// element is not part of the DOM
}
Run Code Online (Sandbox Code Playgroud)
但这对我来说没有多大意义(可能取决于上下文):如果你删除了一个元素,那么你知道你已经删除了它.你为什么要对它做进一步的操作?
您还可以使用document.body.contains(element); 或者$.contains(body, element)。
检查是否parentNode不可靠;如果删除的是元素的祖先,而不是元素本身,那么parentNode仍然会返回父元素,而该元素不再在 DOM 中。
var ancestor = document.querySelector('div');
var ghost = document.querySelector('br');
ancestor.parentNode.removeChild(ancestor);
console.log(ghost.id + ' son of ' + ghost.parentNode.id);
console.log(ghost.id + (document.body.contains(ghost) || ' dont') + ' exists in DOM');Run Code Online (Sandbox Code Playgroud)
<div id="ancestorToRemove">
<p id="a bitch">
<br id="you">
</p>
</div>Run Code Online (Sandbox Code Playgroud)