我正在使用
MutationObserver
API,并希望将传入的 MutationRecord
正确应用到我存储在其他地方的树的副本。让我困惑的是removedNodes
收藏。当我的观察者被调用并且removedNodes
不为空时,这意味着突变已经发生并且该节点已从其父节点childNodes
中删除。因此,为了确定其在突变发生之前在子列表中的位置(以反映在我的树副本中),我可以检查 previousSibling
的
nextSibling
和
MutationRecord
属性。 但是如果
removedNodes
包含多个元素怎么办?由于
MutationRecord
只出现了一次
previousSibling
和
nextSibling
,因此合乎逻辑的是认为删除的节点曾经位于它们之间。但这是实际发生的事情吗?所以,陈述一些单句问题:
removedNodes
包含多个节点,那么在发生突变(删除)之前,该集合中列出的每个节点都位于 DOM 树中 MutationRecord 的
previousSibling
和
nextSibling
之间?
childNodes
集合中的相邻索引)子节点被删除,这将导致多个
MutationRecord
?
childNodes
中的顺序相同?
是否可以安全地假设,如果一个的多个遥远的(即不存在于父级的是的。一般来说,每个 DOM 方法调用都会产生一个
childNodes
集合中的相邻索引中)子级 指定的观察节点被删除,这将导致多个MutationRecord
s?
MutationRecord
,而改变多个远程节点则需要多次单独的调用。
是否可以安全地假设,如果 MutationRecord 的是的。无论如何,
removedNodes
包含多个节点,则该集合中列出的每个节点 曾经位于 MutationRecord 的previousSibling
和nextSibling
在突变(删除)之前的 DOM 树中 发生了?
addedNodes
/
removedNodes
中很少有多个节点。它可能发生在
replaceChildren()
、.innerHTML=
或
.textContent=
删除所有子项
surroundContent()
替换 Range
覆盖的所有节点
(不保证详尽,但我已经涵盖了 DOM 规范中对相应算法的所有调用)
其他一切都操纵单个节点。
是否可以安全地假设数组中节点的顺序与它们过去放置在其父节点中的顺序相同?是的。
childNodes
?