【问题标题】:Is elt.cloneNode(true) synchronous?elt.cloneNode(true) 是同步的吗?
【发布时间】:2018-05-31 07:18:52
【问题描述】:

我需要知道 element.cloneNode(true) 是否可以与 JavaScript 异步。我跑了这样的事情:

tempMu = document.createElement("section");
var mu = new MutationObserver(function(mus) {
    console.log("mus", mus);
});
mu.observe(tempMu, {childList:true, subtree:true});
setTimeout(()=>mu.disconnect(), 1000);
tempMu.appendChild(aLargeDiv.cloneNode(true));

我只收到了一个突变回调,但这当然不能说服我。有人知道吗?

【问题讨论】:

  • 评论不用于扩展讨论;这个对话是moved to chat。
  • @Bergi 我不买那个。请参阅此处:2.5.2 HTML 中的动态标记插入 (w3.org/TR/2008/WD-html5-20080610/dom.html)。我在那里看不到任何关于同步/异步的信息(除了他们声明事件被触发的文档节点)。
  • 这个问题似乎被误导了。克隆节点不会触发任何类型的突变事件。插入一个新项目可以触发突变,但是使用克隆或其他方法来创建该新元素是无关紧要的。您的代码只会触发一个突变,因为您只执行过一个突变,就是这样。您稍后断开连接的事实不会对此产生任何影响。
  • 如果你的问题是突变观察者回调是否在setTimeout的回调之前运行,这就是你应该问的,但关于同步逻辑和cloneNode。
  • @loganfsmyth 你不只是假设它是如何工作的吗?

标签: javascript asynchronous dom mutation-observers clonenode


【解决方案1】:

我向 Chromium 提交了文档请求:

795620 - cloneNode 是否保证同步运行? - 铬 - 单轨列车 https://bugs.chromium.org/p/chromium/issues/detail?id=795620

【讨论】:

  • 我看不出这与 Chromium 有什么关系。如果有或应该有这方面的文档,它肯定属于 DOM 规范或 JavaScript 规范。
  • @Alohci 当然,它属于 W3C 规范,但我认为我们还没有。
猜你喜欢
  • 2020-07-21
  • 2019-07-06
  • 1970-01-01
  • 2017-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-01
  • 2013-01-22
相关资源
最近更新 更多