当一个mutationObserver 触发一个带有单个元素的childList 更改时,假设该元素被完全解析是否安全?

con*_*exo 5 javascript dom mutation-observers custom-element native-web-component

我有一个<my-el>结构与此类似的自定义元素(纯静态的、服务器呈现的 HTML):

<my-el>
  <div>a</div>
  <div>b</div>
  <div>c</div>
  <div>d</div>
</my-el>
Run Code Online (Sandbox Code Playgroud)

由于 Chrome 不保证connectedCallback自定义元素的子元素可用性,我使用HTMLParsedElement它基本上使用以下步骤延迟自定义元素初始化:

  1. 测试元素(或任何祖先元素)是否具有nextSibling(在这种情况下解析器可能已经通过my-el),或者是否DOMContentLoaded已经到达(又名document.readyState !== 'loading')。
  2. 如果以上都不是,设置一个MutationObserverchildList重新检查以上条件。

概述的策略目前仍然存在的问题是,MutationObserver当这是可用的 HTML 时,可能会被触发:

<my-el>
  <div>a</div>
  <div>b</div>
</my-el>
Run Code Online (Sandbox Code Playgroud)

甚至这个

<my-el>
  <div>a</div>
</my-el>
Run Code Online (Sandbox Code Playgroud)

在这些情况下, MutationObserver 会被多次触发,并且处理程序无法知道</my-el>实际何时到达结束。

问题:有谁知道div像这样包装所有内部元素是否可以解决这个问题:

<my-el>
  <div>
    <div>a</div>
    <div>b</div>
    <div>c</div>
    <div>d</div>
  </div>
</my-el>
Run Code Online (Sandbox Code Playgroud)

或者换句话说,当变异观察者为这个结构触发时,我能否可靠地假设包装子 div 完全可用,包括它的所有后代节点?