Javascript 检测有效的DOM元素

Javascript 检测有效的DOM元素,javascript,dom,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(someNod

当我使用.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,但效果并不好。

removeChild会像jQuery的.remove一样从文档中删除dom元素。由于您在变量someNode中保留对它的引用,因此浏览器不会对其进行垃圾收集,并且您仍然可以使用someNode引用dom元素。您甚至可以将其重新插入到其他地方的文档中


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

removeChild会像jquery的.remove一样从文档中删除dom元素。由于您在变量someNode中保留对它的引用,因此浏览器不会对其进行垃圾收集,并且您仍然可以使用someNode引用dom元素。您甚至可以将其重新插入到其他地方的文档中


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

someNode = document.getElementById("someid");

并检查其返回是否有效。对象在第一次被实例化,它将一直保持实例化,直到对该变量进行更新为止。除非您再次引用该变量,否则更新的DOM对该变量将不可见。

删除节点更新之后

someNode = document.getElementById("someid");

并检查其返回是否有效。对象在第一次被实例化,它将一直保持实例化,直到对该变量进行更新为止。除非再次引用,否则更新的DOM对变量不可见。

定义“有效”。如果您指的是“文档的一部分”,则类似于:

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

…应该做到这一点。

定义“有效”。如果您指的是“文档的一部分”,则类似于:

function isElementInDocument(element) {
    while (element = element.parentNode) {
        if (element === document) {
            return true;
        }
    }
    return false;
}
…应该做到这一点。

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

一个简洁的方法是

if(p.removeChild(someNode){
    someNode = undefined;
}
通过将someNode设置为等于元素,可以将其值设置为对象,表示元素。实际上,您已经将有关元素的所有信息保存到此变量中。因此,要从变量中删除它,需要使用someNode=undefined

一个简洁的方法是

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

您可以保存对getElementById的第二次调用,并通过使用someNode.parentNode.removeChildsomeNode从标记中删除id属性;您可以保存对getElementById的第二次调用,并通过使用someNode.parentNode.removeChildsomeNode从标记中删除id属性;