我一直在使用elem.removeChild()从文档中删除元素,但是保存了对该元素的JavaScript引用,以便可以在适当的时候重新添加它们。在Firefox和Chrome中可以正常工作。

现在我注意到在IE7上,这些元素在删除所有子元素的过程中被破坏了。当我将它们添加回相同的父元素时,它们是相同类型的元素,并保留了诸如类名之类的内容,但是没有子元素。

这是预期的行为吗?我知道我可以更改我的应用程序以执行不同的操作,但是这需要花费大量的时间进行重做,我显然希望避免这种情况。我一直认为通过使用removeChild()或通过将父级的innerHTML设置为空字符串来删除元素是可以的,只要我对元素有引用(即,变量指向元素,而不仅仅是元素ID),可以自由添加和删除元素而不会弄乱元素。

这是IE的错误吗?我是否感到困惑,是否还在进行其他操作,或者这是已知的预期行为?

最佳答案

removeChild的规范并未明确指出要删除的节点的子节点应与该节点一起保留,尽管在我看来,他们应该这样做并很显然是FF和Chrome开发人员决定的。我不知道如果将父对象的innerHTML设置为空字符串时规范会做什么,但是我认为这种方式有点像说“擦掉那里的所有内容”,因此在这种情况下,我认为这样做是合理的即使代码中存在对某些已删除元素的引用,浏览器也会丢弃该innerHTML中的所有内容。

10-08 03:03