系统学习DOM(三)

259 阅读1分钟

这是我参与更文挑战的第6天,活动详情查看:更文挑战

前两篇 系统学习DOM(一)系统学习DOM(二) 主要介绍的是 DOM1 级别节点类型和常用 API,DOM2、DOM3 则在此基础上引入了更多交互能力,并支持更高级 XML 特性。但是除事件外,大多 DOM2、DOM3 的 API 并不常用,因此这里也只是做简要介绍。

一、DOM 变化

为了对 DOM 增删改查更好的支持,DOM2、DOM3 对于已有类型新增了属性和方法,例如:

  • xmlns:支持命名空间(严格是 XHTML 支持命名空间),常见场景是在 HTML 里插入 SVG
  • createElementNS:创建一个属于命名空间的新元素
  • getElementsByTagNameNS:返回属于命名空间和 tagName 的元素列表(NodeList)
  • isSupport:确定当前节点是否具有某特性,和 DOM1 document.implementation.hasFeature() 类似,例如:
if (document.body.isSupported("HTML", "2.0")){
  // 执行只有“DOM2 级 HTML”才支持的操作
}
  • contentDocument:引用 iframe 中的 document
  • 其他不再列出

二、样式

主要针对外部、内部、内联这三种 CSS 机制提供了一套 API。

  • getComputedStyle:获取计算样式,即多个样式下最终生效的样式
  • offsetXXX:元素偏移量,如下:

Screen Shot 2021-06-27 at 22.33.21.png

  • clientXXX:元素客户区大小,如下:

Screen Shot 2021-06-27 at 22.34.31.png

  • scrollXXX:滚动大小,如下:

Screen Shot 2021-06-27 at 22.35.32.png

三、遍历

  • NodeIterator/TreeWalker:辅助对 DOM 进行 DFS 遍历

四、范围

DOM2 还定义了“范围”(range)接口,在常规 DOM 操作不能有效修改文档时,方便实现。

  • createRange:创建 DOM range
  • 不常用,不再细述具体用法

DOM2、DOM3 在 DOM1 基础上,添加了很多操作 DOM 的方法,这些方法在做底层开发(如编辑器等)会非常有用,但是在业务开发中用处不多,我们大概了解其全貌即可。