确定MutationRecord中removedNodes的索引

问题描述 投票:0回答:1

我正在使用

MutationObserver
API,并希望将传入的
MutationRecord
正确应用到我存储在其他地方的树的副本。让我困惑的是
removedNodes
收藏。当我的观察者被调用并且
removedNodes
不为空时,这意味着突变已经发生并且该节点已从其父节点
childNodes
中删除。因此,为了确定其在突变发生之前在子列表中的位置(以反映在我的树副本中),我可以检查 previousSibling
nextSibling
MutationRecord
 属性。
但是如果 
removedNodes
 包含多个元素怎么办?由于 
MutationRecord
 只出现了一次 
previousSibling
nextSibling
,因此合乎逻辑的是认为删除的节点曾经位于它们之间。但这是实际发生的事情吗?

所以,陈述一些单句问题:

    是否可以安全地假设,如果 MutationRecord 的
  1. removedNodes
     包含多个节点,那么在发生突变(删除)之前,该集合中列出的每个节点都位于 DOM 树中 MutationRecord 的 
    previousSibling
    nextSibling
     之间? 
  2. 是否可以安全地假设,如果指定观察节点的多个远距离(即不存在于父级的
  3. childNodes
     集合中的相邻索引)子节点被删除,这将导致多个 
    MutationRecord
  4. 如果 1) 为 true,是否可以安全地假设数组中节点的顺序与它们过去放置在其父级
  5. childNodes
     中的顺序相同?
提前致谢。

javascript dom mutation-observers
1个回答
0
投票
是否可以安全地假设,如果一个的多个遥远的(即不存在于父级的

childNodes

 集合中的相邻索引中)子级
指定的观察节点被删除,这将导致多个
MutationRecord
s?

是的。一般来说,每个 DOM 方法调用都会产生一个

MutationRecord

,而改变多个远程节点则需要多次单独的调用。

是否可以安全地假设,如果 MutationRecord 的

removedNodes

 包含多个节点,则该集合中列出的每个节点
曾经位于 MutationRecord 的 
previousSibling
nextSibling
 在突变(删除)之前的 DOM 树中
发生了?

是的。无论如何,

addedNodes

/
removedNodes
 中很少有多个节点。它可能发生在

(不保证详尽,但我已经涵盖了 DOM 规范中对相应算法的所有调用)

其他一切都操纵单个节点。

是否可以安全地假设数组中节点的顺序与它们过去放置在其父节点中的顺序相同?

childNodes

是的。

© www.soinside.com 2019 - 2024. All rights reserved.