/** * `v-unwrap` —— 运行时把宿主元素**替换为自己的子节点**(宿主自身消失)。 * * 用途:Vue 用 `v-html` 承载从 v2.9.2 搬运来的 HTML 时会多出一层 `
`, * 而旧页是把同一段 HTML **直接注入**页签容器(无宿主)⇒ 结构/样式计数不一致。 * 该指令在挂载后解包,使**运行时 DOM 与 v2.9.2 完全一致**。 * * 注:SSR 不执行指令,故结构对拍工具(`tools/struct_diff*.mjs`)对带 `unwrap-host` 类的 * 元素做等价**解包**后再比 —— 判据与运行时口径一致。 */ import type { Directive } from 'vue' function unwrap(el: Element): void { const parent = el.parentNode if (!parent) return while (el.firstChild) parent.insertBefore(el.firstChild, el) parent.removeChild(el) } export const vUnwrap: Directive = { mounted: (el) => unwrap(el), }