当前位置: 首页 > news >正文

Dom详解

DOM(文档对象模型)详解

1. 什么是 DOM?

DOM(Document Object Model)是浏览器提供的 API,它将 HTML 或 XML 文档解析成树状结构,让 JavaScript 可以动态访问和修改网页内容。

核心概念:DOM 将网页表示为一棵,其中每个 HTML 元素都是一个节点(Node),JavaScript 可以操作这些节点来修改页面内容。


2. DOM 结构

DOM 是一个树形结构,分为以下几个主要部分:

document
 ├── html
 │   ├── head
 │   │   ├── meta
 │   │   ├── title
 │   ├── body
 │       ├── div
 │       │   ├── h1
 │       │   ├── p

常见 DOM 节点类型
| 节点类型 | 描述 |
|—|—|
| document | 整个 HTML 文档 |
| element(元素节点) | HTML 标签(如 <div><p>) |
| text(文本节点) | 元素内部的文本 |
| attribute(属性节点) | 元素的属性(如 id="app") |
| comment(注释节点) | HTML 注释(如 <!-- 注释 -->) |


3. 获取 DOM 元素

可以使用以下方法获取 DOM 节点:

1️⃣ 通过 ID 获取元素
let elem = document.getElementById("myElement");
2️⃣ 通过类名获取元素
let elements = document.getElementsByClassName("myClass"); // 返回 HTMLCollection
3️⃣ 通过标签名获取元素
let elements = document.getElementsByTagName("div"); // 返回 HTMLCollection
4️⃣ 通过 CSS 选择器获取
let elem = document.querySelector(".myClass"); // 获取第一个匹配的元素
let elems = document.querySelectorAll(".myClass"); // 获取所有匹配的元素(NodeList)

4. 操作 DOM

1️⃣ 修改元素内容
let elem = document.getElementById("myElement");
elem.innerHTML = "<strong>新内容</strong>"; // 设置 HTML 内容
elem.textContent = "纯文本内容"; // 只设置文本,不解析 HTML
2️⃣ 修改元素属性
elem.setAttribute("class", "newClass"); // 设置属性
let className = elem.getAttribute("class"); // 获取属性值
elem.removeAttribute("class"); // 移除属性
3️⃣ 修改样式
elem.style.color = "red"; // 直接修改样式
elem.style.fontSize = "20px";

5. 创建 & 删除 DOM 节点

1️⃣ 创建新元素
let newDiv = document.createElement("div"); // 创建元素
newDiv.textContent = "我是新元素";
document.body.appendChild(newDiv); // 添加到 body
2️⃣ 插入子元素
let parent = document.getElementById("container");
let newElem = document.createElement("p");
newElem.textContent = "我是段落";
parent.appendChild(newElem);
3️⃣ 删除元素
let elem = document.getElementById("myElement");
elem.remove(); // 直接删除

6. 事件处理

1️⃣ 添加事件
document.getElementById("btn").addEventListener("click", function() {
    alert("按钮被点击了!");
});
2️⃣ 事件委托
document.getElementById("list").addEventListener("click", function(event) {
    if (event.target.tagName === "LI") {
        alert("点击了 " + event.target.textContent);
    }
});

事件委托适用于动态创建的元素,避免给每个子元素单独绑定事件。


7. DOM 片段优化

使用 documentFragment 提高性能:

let fragment = document.createDocumentFragment();
for (let i = 0; i < 10; i++) {
    let li = document.createElement("li");
    li.textContent = `Item ${i + 1}`;
    fragment.appendChild(li);
}
document.getElementById("list").appendChild(fragment); // 一次性插入,提高性能

总结

操作方法
获取元素getElementById()querySelector()
修改内容innerHTMLtextContent
修改属性setAttribute()getAttribute()
修改样式style.property
创建元素document.createElement()
插入元素appendChild()insertBefore()
删除元素remove()
绑定事件addEventListener()

以上就是 DOM 的核心知识点,掌握这些方法,可以实现大部分网页交互功能。🚀

相关文章:

  • 02 | 快速部署 fastgo 项目
  • 在 Spring Boot 中实现基于 TraceId 的日志链路追踪
  • vue3-element-admin 前后端本地启动联调
  • IntelliJ IDEA v2024.3.4.1 Windows Java开发工具安装
  • 瑞芯微RK3576(2)-调试过程中遇到的问题
  • 如何用AI制作我们记忆中的乡村夜景
  • 获取URL字段的方法
  • 【反无人机目标检测数据集】空对空视觉检测微型无人机:深度学习的实验评估
  • C语言每日一练——day_4
  • 力扣(leetcode)每日一题 2012 数组美丽值求和
  • Linux 磁盘和文件系统管理
  • SpringMVC 基本概念与代码示例
  • 数据结构之线性表
  • Django-ORM-prefetch_related
  • 排序 --- 快速排序
  • 网络配置与pip工具安装
  • 文件上传漏洞 upload-labs靶场
  • 开源数字人模型Heygem
  • 【学习笔记】《逆向工程核心原理》02.小段标记法、IA-32寄存器、栈、abex‘crackme、栈帧
  • 说一下spring的事务隔离级别?
  • 汤加附近海域发生6.4级地震
  • 巴方:印度上周导弹袭击造成至少40名平民死亡
  • 彭丽媛同巴西总统夫人罗桑热拉参观中国国家大剧院
  • 融创中国:境外债务重组计划聆讯定于9月15日召开
  • 青海规范旅游包车行为:不得引导外省籍旅游包车违规驻地运营
  • 金科股份重整方案通过,正式进入重整计划执行环节