gpt4 book ai didi

javascript - Dojo:第二次放置相同的 dom 节点在 IE11 上不起作用

转载 作者:行者123 更新时间:2023-11-29 23:29:50 26 4
gpt4 key购买 nike

我问这个问题只是出于科学兴趣。我没有找到与我的问题相关的问题,但我已经制定了解决方法。

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

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

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

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

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

如开头所述,我有一位科学家对这个问题感兴趣。有人知道这种行为吗?它是 dojo/ie 错误吗?我做错了什么吗?

最佳答案

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

Here is same question, but regarding IE 7

在我看来你有几种选择:

  1. 每次都创建新节点,就像您在 div1 示例中所做的那样

  2. 同时将所有节点放入容器中并切换它们的可见性。

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

1 和 2 你已经试过了。也许还有一些其他的选择,但我目前没有看到。

关于javascript - Dojo:第二次放置相同的 dom 节点在 IE11 上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47717585/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com