Dojo:第二次放置相同的dom节点对IE11不起作用

时间:2017-12-08 15:41:15

标签: javascript internet-explorer dojo

这是一个我要求科学兴趣的问题。我没有找到与我的问题相关的问题,但我已经解决了。

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

适用于Chrome,Firefox和Edge。在Internet Explorer 11(以及旧版本)中,每个已构建的dom节点将仅首次放置。如果dom-node应该第二次放置,目标节点将为空(旧的孩子将被删除,不会添加新的孩子,或者至少只有一个没有内容的孩子)。

这是一个简化的JSFiddle示例来说明问题。

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

在我的真实代码中,遗憾的是,提供的解决方法是不可能的。我当前的解决方案涉及嗅探ie并将所有节点放在使用visibility属性的同一个地方。

如开头所述,我对此问题有科学兴趣。有人知道这种行为吗?这是一个道场/即错误吗?我做错了吗?

1 个答案:

答案 0 :(得分:1)

这不是道场或IE漏洞,只是浏览器删除节点的方式不同。对only函数使用place()属性时,将使用node.removeChild()清除容器节点的内容。虽然您有一个指向您的节点的链接,但它仍然存在于内存中,并且只从树中删除。不同的浏览器以不同的方式执行此操在你的情况下,chrome和firefox将你的节点及其内容保存在内存中,IE只保留节点,但是innerHTML被清除。

Here is same question, but regarding IE 7

在我看来,你有几个选择:

  1. 每次在div1

  2. 的示例中创建新节点
  3. 同时将所有节点放在容器中并切换它们的可见性。

  4. 为您的节点创建模板化小部件,并每次实例化它。

  5. 1和2你已经尝试过了。也许还有其他一些选择,但我现在还没有看到它们。