2011-03-04 165 views
0

我想刪除動態創建的臨時元素。刪除無父元素的HTML元素

x = document.createElement("DIV"); 
x.innerHTML = res; 
y = x.parentNode; 
x = y.removeChild(x); 
x = null; 

我已經寫了這些代碼,但因爲它確實注意到有父母,他們不工作。我知道我可以創建第二個臨時節點來保留第一個節點,但是接下來我需要第三個節點來刪除第二個節點.... :)這裏我需要一個函數來刪除節點,而不需要父節點。我也認爲我可以直接將節點放到文檔對象上並刪除它,但如果存在,我正在尋找更高效的解決方案。

+1

爲什麼你認爲你必須刪除節點呢? – Pointy 2011-03-04 15:01:34

+1

如果你永遠不會將元素添加到DOM,那麼你不需要從DOM AFAIK中刪除它。 – 2011-03-04 15:03:17

+0

順便說一句,這個問題是幾乎相同,你的前一個:http://stackoverflow.com/questions/5194924/does-removechild-really-delete-the-element – RoToRa 2011-03-04 15:49:25

回答

4

您不需要刪除節點,因爲它沒有添加到DOM。當您將該變量設置爲null時,元素將不再存在。一般來說,DOM節點總是有一個父節點,只要它們被添加到模型中,但在這裏你不會在你的代碼中這樣做。

1

removeChild只是從文檔中刪除元素。由於你的元素不是文檔的一部分,你不需要使用它。只要確保您沒有在代碼中保留對元素的任何引用,例如通過將變量設置爲null就像您一樣,並且JavaScript自動垃圾回收將負責其餘部分。

如果您的變量是函數中的局部變量,那麼您甚至不需要將它設置爲null,因爲它將自行停止存在。

沒有直接的方法來「刪除」JavaScript中的對象。

+0

對象**可**被刪除,有一定的侷限性 - https://developer.mozilla.org/en/JavaScript/Reference/Operators/Special_Operators/delete_Operator – 2011-03-04 15:38:32

+0

嗯。 'delete'操作符刪除一個對象的屬性,而不是對象本身。對於這裏的目的,它不會更多地設置爲「空」(或「未定義」)。 – RoToRa 2011-03-04 15:46:12