Internet explorer and removeChild()

Internet explorer and removeChild()

本文关键字:removeChild and explorer Internet      更新时间:2023-09-26

我一直使用elem.removeChild()从我的文档中删除元素,但保存对该元素的JavaScript引用,以便我可以在适当的时候将它们添加回来。在Firefox和Chrome中运行良好。

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

这是预期行为吗?我知道我可以改变我的应用来做一些不同的事情,但这需要花费几个小时的时间,我显然希望避免这种情况。我一直认为它是可以删除元素,无论是通过使用removeChild()或通过设置父的innerHTML为空字符串,只要我有一个引用的元素(即一个变量指向元素,而不仅仅是一个元素id),它是可以自由地添加和删除元素没有打乱元素。

这是一个bug与IE,我不知何故感到困惑和其他东西正在发生,或者这是已知的和预期的行为?

removeChild的规范并没有明确地说要删除的节点的子节点应该与该节点一起保留,尽管对我来说,它们应该是合乎逻辑的,显然这也是FF和Chrome开发人员决定的。我不知道规范说做什么,如果父的innerHTML被设置为一个空字符串,但在我看来,这种方式有点像说"擦去任何东西在那里",所以在这种情况下,我认为这是合理的浏览器扔掉一切在innerHTML,即使有在代码中引用的一些被删除的元素。

没有看到更多的实现,我不确定你会得到更多的盲目的答案;这里有一个:

你碰巧正在与表行工作吗?看看这个答案. 显然,<tr>必须在IE中连接到<tbody>,而不是直接连接到<table>