html - 为什么 DOM 规范不能识别扁平树?
问题描述
概括地说,DOM规范定义了阴影树的概念如下:
- 影子树是不同于当前文档的节点树(光树)。
- 它的根(影子根)通过宿主引用与光照树节点相连——这与 DOM 树的后代/祖先关系不同。
- 此外,影子树可以有槽节点,而它们又可以通过分配的节点关系与轻树节点(槽表)连接(再次被认为与 DOM 树结构不同)。
我觉得这张照片有点牵强。看起来我们实际上没有两棵不同的树(光和影),而是三棵树。实际上,用户代理会渲染另一个名为flattened tree的用户代理。在这棵树中,影子根是其宿主的子节点,而插槽是其插槽表的祖先:
有人可能会争辩说扁平树只是一种“虚拟想法”。但是,它用于 CSS 和事件侦听,并且可能这一事实证明了它的有用性。
松散地,阴影树被视为阴影主机的内容,而不是其正常的灯光树内容。但是,它的一些光照树子节点可以通过将它们分配给插槽来“拉入”阴影树。出于 CSS 目的,这会导致它们被视为插槽的子项。(CSS非规范解释)
当物质状态可以用单个扁平树来描述时,是否有任何理由引入影子树的概念,特别是槽分配节点,其中节点与众所周知的后代/祖先引用连接,而不是具有名为“已分配”的特殊引用节点”?当然,如果我们渴望封装,API 函数之类findElementById()
的将保持扁平树的“影子”子树完好无损。
解决方案
推荐阅读
- html - 在手动刷新页面之前,CSS 无法正确加载
- python - 在 Jupyter 笔记本中未显示 Plotly 旭日图
- php - 迁移表时出现问题。这个问题在下面给出
- firebase - Angular 和 Firebase 应用程序的三足 OAuth2 范围验证问题
- c# - 如何提取 XML 文件中每个元素的属性值?
- google-apps-script - GAS 和 Google 电子表格 API v4 - 写入文件
- iphone - iPhone:InApp 购买问题
- c# - Visual Studio 2019 删除虚拟垂直添加的空行
- rust - 如何在 Rust 编译器资源管理器中使用外部 crate?
- ruby-on-rails - 在 Rails 中迭代和渲染视图的 ActiveRecord_Relation?