Javascript Dojo:第二次放置相同的dom节点不会';我不在IE11上工作

Javascript Dojo:第二次放置相同的dom节点不会';我不在IE11上工作,javascript,internet-explorer,dojo,Javascript,Internet Explorer,Dojo,这是一个我只是出于科学兴趣而提出的问题。我没有发现与我的问题相关的问题,但我已经找到了解决办法 问题是: 我在我的小部件中有一个节点,与小部件的逻辑上下文相关,是已经构建的其他三个dom节点之一。对于此任务,我使用domconstruct.place(),并使用选项“only”轻松替换可能已放置在此节点中的所有子节点 它适用于Chrome、Firefox和Edge。在InternetExplorer11(以及更早的版本)中,每个已经构建的dom节点将仅第一次放置。如果第二次放置dom节点,目标节

这是一个我只是出于科学兴趣而提出的问题。我没有发现与我的问题相关的问题,但我已经找到了解决办法

问题是: 我在我的小部件中有一个节点,与小部件的逻辑上下文相关,是已经构建的其他三个dom节点之一。对于此任务,我使用
domconstruct.place()
,并使用选项“only”轻松替换可能已放置在此节点中的所有子节点

它适用于Chrome、Firefox和Edge。在InternetExplorer11(以及更早的版本)中,每个已经构建的dom节点将仅第一次放置。如果第二次放置dom节点,目标节点将为空(旧的子节点将被删除,不会添加新的子节点,或者至少只有一个没有内容的子节点)

下面是一个简单的例子来说明这个问题

这个提琴已经包含了一个解决方法:放置时只需重新创建节点。因此,每次放置“test1”时,第一个按钮将与ie一起工作。按钮2和按钮3将第一次工作,但从第二次开始将不会放置任何东西。如果发生这种情况,第一个按钮仍将工作

不幸的是,在我的真实代码中,所提供的变通方法是不可能的。我目前的解决方案包括嗅探ie并将所有节点放在同一个位置上,使用可见性属性


正如一开始所说的,我对这个问题有一种科学的兴趣。有人知道这种行为吗?它是dojo/ie bug吗?我做错什么了吗?

这不是dojo或IE bug,只是浏览器删除节点的方式不同而已。当您仅为
place()
函数使用
属性时,容器节点的内容将通过
node.removeChild()
清除。虽然您有一个指向节点的链接,但它仍然存在于内存中,并且仅从树中删除。不同的浏览器以不同的方式实现这一点。在您的情况下,chrome和firefox将节点及其内容保留在内存中,IE仅保留节点,但innerHTML被清除

我认为你有几个选择:

  • 每次都创建新节点,就像在div1示例中那样

  • 同时将所有节点放置在容器中,并切换它们的可见性

  • 为您的节点创建模板化小部件并每次实例化它


  • 1和2您已经尝试过了。也许还有其他选择,但我现在没有看到。

    谢谢你的精彩解释和其他主题。为了完整性,我必须提到Edge处理像FF&Chrome一样的removeChild,所以IE非常单独处理这个处理。不幸的是,我保存在内存中并希望重用的这些节点是由dojo之上的另一个框架创建的节点。这个框架非常烦人,因为它通过在“configs”中定义来创建很多东西,并且在启动时创建。我不知道以编程方式(轻松地)重新创建此对象的可能性。所以解决方案1和3对我来说永远都不起作用。解决方案2很好,我很满意:)@Onsokumaru一点也不感谢。现在我明白你的问题了。看来你在这里真的什么都做不了了。