2011-07-10 160 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