2011-07-10 250 views
2

我一直在使用elem.removeChild()從我的文檔中刪除元素,但保存了對該元素的JavaScript引用,以便我可以在適當的時候添加它們。在Firefox和Chrome中運行得很好。Internet Explorer和removeChild()

現在我注意到,在IE7上,這些元素會在這個過程中被銷燬,讓他們的所有孩子都被移除。當我將它們添加回相同的父元素時,它們是相同類型的元素並保留了類名,但它們沒有子元素。

這是預期的行爲?我知道我可以改變我的應用以不同的方式做事,但這需要好幾個小時的重做,我顯然希望避免這種情況。我一直認爲可以通過使用removeChild()或通過將父級的innerHTML設置爲空字符串來移除元素,並且只要我有對元素的引用(即,變量指向元素,而不僅僅是一個元素id),可以自由地添加和移除元素,而不會造成元素混亂。

這是一個IE瀏覽器的錯誤,我有點困惑和其他事情正在發生,或者這是已知和預期的行爲?

+6

預計Internet Explorer 7會出現意外情況。 – Pointy

+1

removeChild的規範沒有明確指出要刪除的節點的子節點應該與該節點保持一致,但對我來說,他們應該顯然是合乎邏輯的FF和Chrome開發者也決定了什麼。如果父母的innerHTML被設置爲空字符串,我不知道規範要做什麼,但在我看來,這有點像說「擦掉那裏的任何東西」,所以在這種情況下,我認爲這是合理的即使在代碼中引用了某些已刪除的元素,瀏覽器也會拋棄該innerHTML中的所有內容。 – nnnnnn

+0

@nnnnnn如果不是評論,我會接受你的回答。原來removeChild並沒有真正銷燬元素,只是將innerHTML設置爲''。 – rob

回答

1

removeChild的規範沒有明確指出被刪除的節點的子節點應該與該節點保持一致,但對我來說,他們應該也很合邏輯,顯然這也是FF和Chrome開發人員所決定的。如果父母的innerHTML被設置爲空字符串,我不知道規範要做什麼,但在我看來,這有點像說「擦掉那裏的任何東西」,所以在這種情況下,我認爲這是合理的即使在代碼中引用了某些已刪除的元素,瀏覽器也會拋棄該innerHTML中的所有內容。

0

沒有看到更多的實現,我不確定你會得到更多的盲目答案;這裏是一個:

你碰巧正在處理表行嗎?檢出this answer 。顯然<tr>必須在IE中附加到<tbody>,而不是直接轉到<table>

+0

不,這不是問題。 – rob

+0

如果你爲你的問題添加了一些'代碼',我可以回答它。 – twip

+0

是的,我認爲它已經解決了,將innerHTML設置爲''不僅僅是從文檔中刪除元素,而是破壞了它們的內容。 (僅在IE上)。不過謝謝。 – rob