我正在使用MutationObserver API,并希望将输入的MutationRecord正确应用于我存储在其他地方的树的副本.让我困惑的是removedNodes系列.当我的观察者被调用并且removedNodes不为空时,这意味着Mutations 已经发生并且该 node 已从其"父childNodes"中删除.因此,为了确定其在子列表before中的位置,发生的Mutations -以反映在我的树副本中-我可以判断MutationRecordpreviousSiblingnextSibling属性. 但如果removedNodes包含多个元素怎么办?由于MutationRecord只出现previousSiblingnextSibling,因此合乎逻辑的是认为删除的 node 曾经位于它们之间.但这真的发生了吗?

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

  1. 可以安全地假设,如果MutationRecord的removedNodes包含多个 node ,那么在发生Mutations (删除)之前,该集合中列出的每个 node 都曾位于多姆树中MutationRecord的previousSiblingnextSibling之间吗?
  2. 可以安全地假设,如果指定观察 node 的多个远距离(即不存在于相邻索引处的父 node 的childNodes集合中)子 node 被删除,这将导致多个MutationRecord吗?
  3. 如果1)成立,那么可以安全地假设数组中 node 的顺序与它们在其父 node childNodes中放置的顺序相同吗?

提前感谢.

推荐答案

是否可以安全地假设,如果一个的多个远亲(即不存在于相邻索引的父方的childNodes个集合中)子 指定的观察 node 已被删除,这将导致多个 MutationRecord

是的一般来说,每个多姆方法调用都会产生一个MutationRecord,并且变异多个远程 node 需要多个单独的调用.

可以安全地假设如果MutationRecord的removedNodes包含多个 node ,那么该集合中列出的每个 node 曾经介于MutationRecord的previousSibling和 Mutations (删除)之前的多姆树中的nextSibling 发生了吗?

是的无论如何,addedNodes/removedNodes中很少有不止一个 node .它可能发生在

  • 插入/替换时使用片段作为新 node
  • 使用replaceChildren().innerHTML=.textContent=删除all名 children
  • 使用surroundContent()替换Range覆盖的所有 node

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

其他一切都操纵单个 node .

可以安全地假设数组中 node 的顺序与它们在父 node 中放置的顺序相同吗 childNodes

是的

Javascript相关问答推荐

为什么我的第二个OnClick Isloading值在TEK查询Mutations 查询中不起作用?

在卡信息之间切换

在JavaScript中对大型级联数组进行切片的最有效方法?

如何通过在提交时工作的函数显示dom元素?

如何分配类型脚本中具有不同/额外参数的函数类型

类型脚本中只有字符串或数字键而不是符号键的对象

构造HTML表单以使用表单数据创建对象数组

引用在HTMLAttributes<;HTMLDivElement>;中不可用

数字时钟在JavaScript中不动态更新

使用JQuery单击元素从新弹出窗口获取值

当使用';字母而不是与';var#39;一起使用时,访问窗口为什么返回未定义的?

在forEach循环中获取目标而不是父对象的属性

使用Nuxt Apollo在Piniastore 中获取产品细节

按什么顺序接收`storage`事件?

处理TypeScrip Vue组件未初始化的react 对象

如何根据查询结果重新排列日期

每隔3个项目交替显示,然后每1个项目交替显示

按特定顺序将4个数组组合在一起,按ID分组

限制数组中每个元素的长度,

每隔一行文本段落进行镜像(Boustrophedon)