js【详解】DOM

文档对象模型(Document Object Model,简称DOM)

DOM 是哪种数据结构 ?

DOM 的本质是浏览器通过HTML代码解析出来的一棵

操作 DOM 常用的 API 有哪些 ?

获取 DOM 节点

//方式 1:通过【id】获取,返回目标 DOM 元素
let div1 = document.getElementById("box1"); 

//方式 2:通过【标签名】获取,返回【类数组】
let arr_class_1 = document.getElementsByTagName("div"); 

//方式 3:通过【样式类名】获取,返回【类数组】
let arr_class_2 = document.getElementsByClassName("hehe"); 

//方式 4:通过【CSS选择器】获取,返回符合条件的第一个 DOM 元素
let div1 = document.querySelector("selector") 

//方式 5:通过【CSS选择器】获取,返回符合条件的所有元素构成的【类数组】
let arr_class_2=3 =document.querySelectorAll("selector") 

修改 DOM 节点

property

property 方式:按对象属性的方式操作 DOM

// 元素.style.样式名 = 新样式值
元素.style.width = "300px";
// 含 - 的样式名,需用驼峰写法
元素.style.backgroundColor = "red"; 
// 一次修改多个样式
元素.style.cssText = "width: 300px;height: 300px;background-color: green;"
// 获取样式
元素.style.样式名

attribute

attribute 方式:使用setAttribute,getAttribute 操作 DOM 的属性

// 元素节点.setAttribute("属性名", "新的属性值");
myNode.setAttribute("class","red");
myNode.getAttribute("class") // red

property 和 attribute 的区别

  • property【推荐】 修改对象属性,不会体现到 html 结构中,可能会引起 DOM 重新渲染

    更推荐使用 property 是因为浏览器的优化,某些修改不会触发 DOM 重新渲染

  • attribute 修改 html 属性,会改变 html 结构,一定会引起 DOM 重新渲染

创建 DOM 节点

// document.createElement("标签名")
const newP = document.createElement('p')
newP.innerHTML = 'this is newP'

创建文档片段

const frag = document.createDocumentFragment()

使用范例如下:

在这里插入图片描述

插入 DOM 节点

const div2 = document.getElementById('div2')
// 插入节点
div1.appendChild(newP)

移动 DOM 节点

// 移动节点
const p1 = document.getElementById('p1')
div2.appendChild(p1)

删除 DOM 节点

父节点.removeChild(子节点)

获取父节点

子节点.parentNode

获取子节点列表(类数组)

const div1 = document.getElementById('div1')
// 父节点.childNodes
let div1ChildNodes = div1.childNodes

【考点】如何提升 DOM 的性能?

DOM 渲染会阻断 js 的运行,且对计算机的资源消耗很大,所以需要尽量减少 DOM 操作,来提升其性能,具体方式如下:

  1. 对 DOM 的查询做缓存

    在这里插入图片描述

  2. 将频繁的 DOM 操作改为一次性操作

    优化前
    在这里插入图片描述

    优化后
    在这里插入图片描述

相关推荐

  1. js_BOM&Dom&Ajax

    2024-03-12 01:12:03       35 阅读
  2. jsdom学习

    2024-03-12 01:12:03       6 阅读
  3. js相关的dom方法

    2024-03-12 01:12:03       20 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-12 01:12:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-12 01:12:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-12 01:12:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-12 01:12:03       18 阅读

热门阅读

  1. 【SQL实用技巧】-- join系列

    2024-03-12 01:12:03       20 阅读
  2. Oracle 12c dataguard查看主备库同步情况的新变化

    2024-03-12 01:12:03       16 阅读
  3. C#求最大公约数: 欧几里得算法 vs 辗转相除法

    2024-03-12 01:12:03       20 阅读
  4. 如何在Ubuntu上部署最新的Google Chrome和ChromeDriver

    2024-03-12 01:12:03       25 阅读
  5. c++基础学习第四天(内存分区,引用)

    2024-03-12 01:12:03       20 阅读