2009-11-27 67 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; 
}