当我使用.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(),但它没有更好。
答案 0 :(得分:4)
removeChild从文档中删除dom元素(jquery的.remove()也是如此)。由于您在变量someNode中保留对它的引用,因此浏览器不会对其进行垃圾回收,您仍然可以使用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;
}