检查Javascript中是否存在节点

Hug*_*ieW 0 javascript dom

这是交易 - 我在页面上有大量元素,我正在使用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 - 任何人都有任何想法我如何检查节点是否已被删除?它可能非常简单,我忘了!

Fel*_*ing 7

如果删除节点,也要删除引用.例如,在您的代码中,分配nullelement:

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)

但这对我来说没有多大意义(可能取决于上下文):如果你删除了一个元素,那么你知道你已经删除了它.你为什么要对它做进一步的操作?


Kam*_*her 6

您还可以使用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)