DOM

174 阅读4分钟

概述

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

DOM中的对象

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

浏览器渲染HTML过程&&&

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

image.png

DOM树的结构

html代码

image.png

树状图

image.png

DOM的相关操作

获取元素的操作&&

获取元素的操作(document.htmlElemennt的相关方法)
  1. getElementByld 通过id获取元素 返回的是一个元素对象
  2. getElementByclassName 通过class 来获取 返回的是HTMLcollection(伪数组)
  3. getElmentsByTagName 通过标签名进行获取 返回的是HTMLcollection(伪数组
  4. getElementsByName 通过name属性 获取 返回的是NodeList (伪数组)
  5. querSlector 通过选择器获取 第一个找到的元素
  6. querYSselectorAll 通过选择器获取全部的元素 返回的是Nodelist(伪数组)

image.png

伪数组特性 下标访问,length 属性

Htmlcollection 和NodeList的区别

HTMLCollection 是即时更新的(live);当其所包含的文档结构发生改变时,它就会自动更新

NodeList 是一个集合 ,也就意味着随后对文档对象模型的任何改动都不会影响集合的内容。(相当于是一个快照) 关于document的相关属性&&

  • document.body 获取body
  • document.heaad 获取head
  • document.form 获取所有的表单
  • document.cookie 获取cookie
  • rootElement 包含文档的元素 默认为null
  • doucumentElement 文档元素 (html)
  • ....

image.png

元素的相关属性

所有元素都具备的属性 (可设置可获取)

  • title 标题
  • tagName 标签名
  • id id值
  • className class的值
  • style 样式设置
  • innerHtml innerText (双标签情况下起作用)
关于对象的属性 元素的属性

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

image.png

元素属性&&(显示在Dom上)

image.png

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

image.png

  • img的src和alt
  • input的type和value及placeholder
  • a标签 href属性 target 属性
  • ...

属性操作的相关方法&& (可以操作任意属性)

  • getAttribute 获取属性

image.png

  • setAttribute 设置属性

image.png

  • removeAAttrubute 删除属性

image.png

示例

image.png

样式获取

使用style 标签获取

image.png

使用getComputedStyle来获取样式(重点)

image.png

兼容写法

image.png

重绘和回流&&&

回流

回流又叫重排(对应页面的布局重新排列)。

触发回流的要求

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

重绘

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

触发重绘的要求

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

回流必定重绘 重绘不一定回流

相关总结

重绘和回流会影响对应的渲染性能 重绘和回流的次数越多 那么性能就越差(避免重绘回流)

避免重绘回流 减少dom操作 减少css操作 (设置样式尽量使用class来指定)

Node

节点的分类

  • 元素节点 Element
  • 属性节点 attribute
  • 文本节点 textNode

节点对应的属性

  • nodeType 节点类型
  • nodeValue 节点值
  • nodeName节点名

image.png

image.png

元素节点的属性

  • attributes 获取该元素所有的属性节点(伪数组)
  • childNodes 获取该元素下所有元素节点 及文本节点的集合(NodeLIst)
  • children 获取该元素下的所有元素节点的集合(HTMLCollection)
  • parent 获取该元素的父节点
  • parentElement 获取该元素的父元素节点
  • previousSibling 上一个兄弟节点
  • previousElementSibling 前一个兄弟元素节点
  • nextSibling 后一个兄弟节点
  • nextElementSibling 后一个兄弟元素节点
节点相关方法

创建节点的方法(document)

        - 创建属性节点 createELment
        - 创建元素节点 createAttribute
        - 创建文本节点 createTextNode 
        - 创建文档片段 creareDocumentFragmen 

image.png

节点操作的方法&&

添加节点的方法

  • append 支持多个参数 支持字符串(追加到后面)
  • appendChild 只有一个参数 不支持字符串(追加到后面)
  • insertBefore 插入到对应的子元素的前面
  • insertAdjacentHTML 插入对应的html 代码到指定位置
  • insertAdjacentText 插入对应的文本到指定位置
  • insertjacentElement 插入对应的元素到指定位置

克隆节点的方法

cloneNode将当前节点进行克隆返回新的节点(传入boolean类型的值 true 深度克隆 false 为浅度克隆)

image.png

image.png

替换的相关方法

  • replacechild 替换子节点
  • replaceChildren 替换里面的所有内容
  • replaceWith 将自身进行替换

image.png