Dojo:第二次放置相同的 dom-node 在 IE11 上不起作用
Dojo: placing the same dom-node a second time doesn't work on IE11
这是我出于科学兴趣提出的问题。我没有找到与我的问题相关的问题,但我已经制定了解决方法。
问题:
我的小部件中有一个我想放置的节点,与小部件的逻辑上下文相关,是已经构建的其他三个 dom-nodes 之一。我使用 domconstruct.place()
和选项 "only" 来轻松替换所有可能已经放置在该节点中的 child。
适用于 Chrome、Firefox 和 Edge。在 Internet Explorer 11(以及更早的版本)中,每个已构建的 dom-nodes 将仅在第一次放置。如果 dom-node 应该第二次放置,目标节点将为空(旧的 child 将被删除,不会添加新的 child 或者至少只有 child没有内容)。
这是一个简化的 JSFiddle 示例来说明问题。
此 fiddle 已包含一种解决方法:只需在放置时重新创建节点。所以每次放置 "test1" 时,第一个按钮将与 ie 一起使用。按钮 2 和 3 将在第一次工作,但从第二次开始不会放置任何东西。如果发生这种情况,第一个按钮仍然有效。
不幸的是,在我的真实代码中,提供的解决方法是不可能的。我目前的解决方案包括嗅探 ie 并将所有节点放在同一个地方,并使用可见性属性。
如开头所述,我有一位科学家对这个问题感兴趣。有人知道这种行为吗?是 dojo/ie 错误吗?我做错了什么吗?
这不是 dojo 或 IE 错误,只是浏览器删除节点的方式有所不同。当您为 place()
函数使用 only
属性时,您的容器节点的内容将被 node.removeChild()
清除。虽然你有一个 link 到你的节点,但它仍然存在于内存中并且只是从树中删除。不同的浏览器以不同的方式执行此操作。在您的情况下,chrome 和 firefox 保留您的节点及其内容在内存中,而 IE 仅保留节点,但 innerHTML 被清除。
Here is same question, but regarding IE 7
在我看来你有几种选择:
每次都创建新节点,就像您在 div1 的示例中所做的那样
同时将所有节点放入容器中并切换它们的可见性。
为您的节点创建模板化小部件并每次实例化它。
1和2你已经试过了。可能还有其他选择,暂时没看到。
这是我出于科学兴趣提出的问题。我没有找到与我的问题相关的问题,但我已经制定了解决方法。
问题:
我的小部件中有一个我想放置的节点,与小部件的逻辑上下文相关,是已经构建的其他三个 dom-nodes 之一。我使用 domconstruct.place()
和选项 "only" 来轻松替换所有可能已经放置在该节点中的 child。
适用于 Chrome、Firefox 和 Edge。在 Internet Explorer 11(以及更早的版本)中,每个已构建的 dom-nodes 将仅在第一次放置。如果 dom-node 应该第二次放置,目标节点将为空(旧的 child 将被删除,不会添加新的 child 或者至少只有 child没有内容)。
这是一个简化的 JSFiddle 示例来说明问题。
此 fiddle 已包含一种解决方法:只需在放置时重新创建节点。所以每次放置 "test1" 时,第一个按钮将与 ie 一起使用。按钮 2 和 3 将在第一次工作,但从第二次开始不会放置任何东西。如果发生这种情况,第一个按钮仍然有效。
不幸的是,在我的真实代码中,提供的解决方法是不可能的。我目前的解决方案包括嗅探 ie 并将所有节点放在同一个地方,并使用可见性属性。
如开头所述,我有一位科学家对这个问题感兴趣。有人知道这种行为吗?是 dojo/ie 错误吗?我做错了什么吗?
这不是 dojo 或 IE 错误,只是浏览器删除节点的方式有所不同。当您为 place()
函数使用 only
属性时,您的容器节点的内容将被 node.removeChild()
清除。虽然你有一个 link 到你的节点,但它仍然存在于内存中并且只是从树中删除。不同的浏览器以不同的方式执行此操作。在您的情况下,chrome 和 firefox 保留您的节点及其内容在内存中,而 IE 仅保留节点,但 innerHTML 被清除。
Here is same question, but regarding IE 7
在我看来你有几种选择:
每次都创建新节点,就像您在 div1 的示例中所做的那样
同时将所有节点放入容器中并切换它们的可见性。
为您的节点创建模板化小部件并每次实例化它。
1和2你已经试过了。可能还有其他选择,暂时没看到。