这是一个我要求科学兴趣的问题。我没有找到与我的问题相关的问题,但我已经解决了。
问题:
我在我的小部件中有一个节点,我想要放置,与小部件的逻辑上下文相关,这是已经构建的其他三个dom节点之一。我使用domconstruct.place()
来执行此任务,并使用“only”选项轻松替换可能已放置在此节点中的所有子项。
适用于Chrome,Firefox和Edge。在Internet Explorer 11(以及旧版本)中,每个已构建的dom节点将仅首次放置。如果dom-node应该第二次放置,目标节点将为空(旧的孩子将被删除,不会添加新的孩子,或者至少只有一个没有内容的孩子)。
这是一个简化的JSFiddle示例来说明问题。
这个小提琴已经包含一个解决方法:只需在放置时重新创建节点。因此第一个按钮将起作用,即每次放置“test1”。按钮2和3将首次工作,但从第二次开始将不会放置任何东西。如果发生这种情况,第一个按钮仍然有效。
在我的真实代码中,遗憾的是,提供的解决方法是不可能的。我当前的解决方案涉及嗅探ie并将所有节点放在使用visibility属性的同一个地方。
如开头所述,我对此问题有科学兴趣。有人知道这种行为吗?这是一个道场/即错误吗?我做错了吗?
答案 0 :(得分:1)
这不是道场或IE漏洞,只是浏览器删除节点的方式不同。对only
函数使用place()
属性时,将使用node.removeChild()
清除容器节点的内容。虽然您有一个指向您的节点的链接,但它仍然存在于内存中,并且只从树中删除。不同的浏览器以不同的方式执行此操在你的情况下,chrome和firefox将你的节点及其内容保存在内存中,IE只保留节点,但是innerHTML被清除。
Here is same question, but regarding IE 7
在我看来,你有几个选择:
每次在div1
同时将所有节点放在容器中并切换它们的可见性。
为您的节点创建模板化小部件,并每次实例化它。
1和2你已经尝试过了。也许还有其他一些选择,但我现在还没有看到它们。