检测有效的DOM元素

时间:2009-11-27 09:36:39

标签: javascript dom

当我使用.removeChild()删除DOM元素时,对该元素的引用仍将其作为有效元素返回:

var someNode = document.getElementById("someid");

if(someNode)
    alert('valid element');
else
    alert('invalid');

var p = document.getElementById('parent_id');
p.removeChild(someNode);


if(someNode)
    alert('valid element');
else
    alert('invalid');

之前和之后,我在警告框中显示“有效”。如何在没有这个的情况下删除DOM元素?我尝试了jQuery的.remove(),但它没有更好。

4 个答案:

答案 0 :(得分:4)

removeChild从文档中删除dom元素(jquery的.remove()也是如此)。由于您在变量some​​Node中保留对它的引用,因此浏览器不会对其进行垃圾回收,您仍然可以使用someNode引用dom元素。您甚至可以将其重新插入到其他位置的文档中。

为了完全删除对dom元素的所有引用,您需要使用someNode = null;取消设置someNode或尝试从dom中重新检索元素

答案 1 :(得分:0)

删除节点更新后

someNode = document.getElementById("someid");

并检查它是否返回有效。该对象在第一次实例化,并将保持该状态直到对该变量进行更新。除非您再次参考,否则变量DOM将不会对变量可见。

答案 2 :(得分:0)

定义'有效'。如果你的意思是“文件的一部分”,那么就像:

function isElementInDocument(element) {
    while (element = element.parentNode) {
        if (element === document) {
            return true;
        }
    }
    return false;
}

......应该这样做。

答案 3 :(得分:0)

通过将someNode设置为等于元素,可以将其值设为对象,从而重新设置元素。基本上,您已将有关该元素的所有信息保存到此变量中。因此,要从变量中删除它,您需要使用someNode = undefined

执行此操作的一种巧妙方法是以下

if(p.removeChild(someNode){
    someNode = undefined;
}