2009-11-27 66 views
1

当我删除使用.removeChild(),参考的元素仍然返回它作为一个有效元素的DOM元素:检测有效的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

您可以保存自己'getElementById'第二个呼叫(并且可能会删除从您的标记的'id'属性)通过使用'someNode.parentNode .removeChild(someNode);' – NickFitz 2009-11-27 10:21:39

回答

4

removeChild从文档中删除dom元素(和jquery的.remove()一样)。由于您在变量some​​Node中保留对它的引用,所以它不会被浏览器垃圾回收,并且您仍然可以使用someNode引用dom元素。你甚至可以将它重新插入其他地方的文档中。

为了彻底去除DOM元素的所有引用

,你需要取消设置someNode与someNode = null;或尝试从DOM

0

去除该节点更新后,只需重新检索元素

someNode = document.getElementById("someid"); 

并检查它是否返回有效。该对象在第一次被实例化时会保留,直到对该变量进行更新。除非您再次提及,否则更新后的DOM将不可见。

0

定义'有效'。如果你的意思是“文件的一部分”,然后像这样:

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

...应该做的伎俩。

0

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

一个整洁的方式做这将是以下

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