unwrap.ts 917 B

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