DOM

343 阅读4分钟

DOM概述

DOM全称(document object model 文档对象模型),主要用于操作对应的html文档中的内容。document是它的超类

DOM中的对象

  • HTMLElement(元素对象 主要是标签)
  • Attribute(属性对象 主要是标签中的属性)
  • Text(文本对象 主要是里面的文本内容)
  • Node(节点对象 包含html中的所有节点)

浏览器渲染HTML的过程

  1. 抽取对应的DOM树(抽取html中的所有内容构成一个树状结构)
  2. 抽取css规则树(抽取css样式构成css规则树)
  3. DOM树和css规则树进行合并形成渲染树(render Tree)进行渲染(js会阻塞渲染树的形成)

DOM树大的结构

image.png

DOM的相关操作

获取元素的操作(document HTMLElement的相关方法)
  • getElementById通过id获取元素 返回的是一个元素对象
  • getElementsByClassName 通过class来获取 返回的是HTMLCollection(伪数组) 有兼容问题
  • getElementByTagName 通过标签名进行获取 返回的是HTMLCollection(伪数组)
  • getElementByName 通过name属性进行获取 返回的是NodeList(伪数组) 有兼容问题
  • querySelector 通过选择器获取第一个找到的元素(返回的是元素对象) 有兼容问题
  • querySelectorAll 通过选择器获取全部的元素 返回的是NodeList(伪数组) 有兼容问题

伪数组特性 下标访问 length长度

HTMLCollection 伪数组和 NodeList 伪数组的区别
  • HTMLCollection 是即时更新的(live);当其所包含的文档结构发生变化时,它会自动更新
  • NodeList 是一个静态集合,也就意味着随后对文档对象模型的任何改动都不会影响集合的内容(相当于是一个快照)
关于document的相关元素获取
  • document.body 获取body
  • document.head 获取head
  • document.forms 获取所有的表单 (伪数组)
  • document.cookie 获取cookie
  • document.rootElement 获取根元素(包含文档的元素 如果没有 默认为null)
  • document.documentElement 获取文档元素(html)
元素的相关属性

所有元素都具备的属性(可读可写)

  • title 标题
  • tagName 标签名
  • id id值
  • classNmae class名
  • classList class列表 (add 添加 remove 移除 toggle 切换 )返回的是一个数组或者伪数组
  • style 样式
  • innerText 显示的文本
  • innerHTML 显示的html
  • textContent 获取标签内所有的内容 类似于innerText 他抽取所有的显示的文本内容
关于对象的属性 元素的属性

对象属性(不会显示在DOM上)

var obj={}
obj.name='jack'

元素属性(显示在DOM上)

var element=new HTMLElement()
element.id='box'
元素类型的特点(相关的元素属性)

元素默认就携带的属性称为初始属性(所有的初始属性都可以直接被.出来)

1687868951730.jpg

原本就有的元素属性有
  • img的 src和alt
  • input的 type 、value、placeholder
  • a标签的href 、target
元素属性操作的方法(可以操作任意属性 初始属性 自定义属性)元素对象的方法
  • getAttribute获取属性 只看你的DOM元素上写没写 没写就是null
  • setAttribuute 设置属性 将对应的属性设置到DOM上显示
  • removeAttribute 删除属性 通过属性名来移除对应的属性 完全为空
  • elememt.getAttribute(attributeName)

image.png

样式获取
  • 使用style标签获取样式

image.png

  • 使用getComputedStyle全局方法来获取样式 image.png
  • 兼容写法

image.png

重绘和回流

回流 回流又叫重排(对于页面的布局进行重新排列)

触发回流的要求

  • 当前对应页面的内容位置布局等发生变化
  • 获取某些属性的时候需要计算对应的位置获取距离的时候(offsetTop offsetLeft...)

重绘 重绘就是重新绘制,也就是说对应的页面进行重现渲染

触发重回的要求

页面的内容或者样式发生更改就会触发

相关总结

回流必定重绘,重绘不一定回流 重绘回流会影响对应的渲染性能,重回和回流的次数越多那么性能越差(避免重绘和回流 如:减少dom操作 减少css操作(设置样式尽量使用class来指定))

image.png

Node
节点的分类
  • 元素节点 element
  • 属性节点 attribute
  • 文本节点 textNode
节点对应的属性
  • nodeType 节点类型
  • nodeValue 节点值
  • nodeName 节点名字

image.png

image.png

元素节点的属性
  • attributes 获取该元素所有的属性节点(伪数组)
  • childNodes 获取该元素下的所有元素节点及文本节点的集合(NodeList)
  • children 获取该元素下的所有的元素节点的集合(HTMLCollection)
  • lastChild最后一个子节点(文本节点和元素节点)
  • lastElementChild 最后一个子元素节点
  • firstChild第一个子节点(文本节点和元素节点)
  • firstElementChild第一个子元素节点
  • parentNode获取该元素的父节点
  • parentElement获取该元素的父元素节点
  • previousSibling前一个兄弟节点(包含文本节点和元素节点)
  • previousElementSibling前一个兄弟元素节点
  • nextSibling后一个兄弟节点((包含文本节点和元素节点)
  • nextElementSibling后一个兄弟元素节点
节点相关方法

创建节点的方法(document)

  1. createElement 创建元素节点
  2. createAttribute 创建属性节点
  3. createTextNode 创建文本节点
  4. createDocumentFragmen 创建文档片段

image.png