news 2026/7/15 2:14:50

JavaScript DOM操作实战:从入门到精通

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
JavaScript DOM操作实战:从入门到精通

JavaScript DOM 核心操作:从内容到节点的实战指南

一、内容操作
  1. 文本内容

    • textContent:获取或设置元素的纯文本内容
    const element = document.getElementById("demo"); console.log(element.textContent); // 获取内容 element.textContent = "新文本"; // 设置内容
    • innerText的区别:textContent获取所有文本(包括隐藏元素),innerText只渲染可见文本
  2. HTML内容

    • innerHTML:操作元素的HTML结构
    element.innerHTML = "<strong>加粗文本</strong>"; // 插入带标签的内容
    • 注意:直接插入HTML可能引发XSS攻击,需对用户输入做转义处理

二、属性操作
  1. 标准属性

    • 直接访问:element.idelement.className
    • 通用方法:
      element.setAttribute("data-id", "123"); // 设置属性 console.log(element.getAttribute("data-id")); // 获取属性 element.removeAttribute("data-id"); // 删除属性
  2. 自定义属性

    • 推荐使用data-*规范:
    <div>console.log(element.dataset.userId); // 通过 dataset 访问

三、样式操作
  1. 修改CSS类

    element.classList.add("active"); // 添加类 element.classList.remove("hidden"); // 移除类 element.classList.toggle("dark-mode"); // 切换类
  2. 直接修改样式

    element.style.color = "#ff0000"; // 行内样式 element.style.setProperty("--primary-color", "blue"); // 修改CSS变量

四、节点操作(核心)
  1. 节点创建

    const newDiv = document.createElement("div"); // 创建元素 const textNode = document.createTextNode("动态内容"); // 创建文本节点
  2. 节点插入

    parentElement.appendChild(newDiv); // 插入子节点末尾 parentElement.insertBefore(newDiv, referenceElement); // 在指定节点前插入
  3. 节点替换与删除

    parentElement.replaceChild(newDiv, oldChild); // 替换节点 parentElement.removeChild(oldChild); // 删除节点
  4. 节点遍历

    console.log(parentElement.firstChild); // 首个子节点 console.log(parentElement.lastChild); // 末尾子节点 console.log(node.nextSibling); // 下一个兄弟节点

五、事件处理
  1. 事件监听

    element.addEventListener("click", (event) => { console.log("点击坐标:", event.clientX, event.clientY); });
  2. 事件委托
    利用事件冒泡提高性能:

    document.getElementById("list").addEventListener("click", (e) => { if(e.target.tagName === "LI") { console.log("点击列表项:", e.target.textContent); } });

六、实战注意事项
  1. 性能优化

    • 批量操作:使用DocumentFragment减少重绘
    const fragment = document.createDocumentFragment(); for(let i=0; i<100; i++) { const li = document.createElement("li"); fragment.appendChild(li); } document.getElementById("list").appendChild(fragment);
  2. 现代API替代方案

    • 使用querySelector/querySelectorAll替代getElementById
    document.querySelector(".container > button"); // CSS选择器语法

总结

DOM操作的核心在于理解节点树结构,通过内容→属性→样式→节点的递进式操作,结合事件机制实现动态交互。建议优先使用现代API(如classListdataset)并注意性能与安全性,可显著提升开发效率。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/1 17:06:49

SpringBoot4.0+JDK25+GraalVM:云原生新纪元

好的&#xff0c;这是一个结合了 Spring Boot 4.0&#xff08;假设版本&#xff09;、未来的 JDK 25 以及 GraalVM 的前沿技术组合&#xff0c;代表了 Java 云原生应用的演进方向。让我们逐步分析其关键特性和架构优势&#xff1a; 1. Spring Boot 4.0&#xff1a;应用框架的进…

作者头像 李华
网站建设 2026/7/13 7:44:54

用Python实现第一个量子机器学习模型完整教程:Qiskit与TensorFlow集成

——手把手代码教学与常见问题解决方案 作者:DREAMVFIA UNION 发布日期:2026年2月1日 版权:© 2026 DREAMVFIA UNION -------------------------------------------------- 目录 1. 第一章:引言——为什么学习量子机器学习 2. 第二章:量子计算基础回顾 3. 第三章…

作者头像 李华
网站建设 2026/7/14 22:36:11

U654615 比特聚集(bit)补题报告

先看题目&#xff1a;题目分析我们有一个长度为 的二进制字符串 &#xff0c;包含字符 0 和 1&#xff0c;至少有一个 1。 可以交换相邻字符&#xff0c;每次交换算一次操作。 目标&#xff1a;让所有 1 连续排列&#xff08;形成一段连续的 1&#xff09;。 求最少操作次数思…

作者头像 李华
网站建设 2026/7/15 0:03:53

AI大模型基于LangChain 进行RAG与Agent智能体开发

大模型&#xff0c;英文名叫Large Model&#xff0c;大型模型。早期的时候&#xff0c;也叫Foundation Model&#xff0c;基础模型。 大模型是一个简称&#xff0c;完整的叫法&#xff0c;应该是“人工智能预训练大模型”。预训练&#xff0c;是一项技术&#xff0c;我们后面再…

作者头像 李华
网站建设 2026/7/8 6:58:22

开题报告-基于BS的在线电影视频播放系统的设计与实现

目录 研究背景与意义系统核心功能技术选型创新点设计预期成果应用价值 项目技术支持可定制开发之功能亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作 研究背景与意义 在线电影视频播放系统基于B/S架构&#xff08;Browser/Server&…

作者头像 李华
网站建设 2026/7/9 15:34:15

【课程设计/毕业设计】基于SSM的疫情健康上报管理系统每日体温填报 异常症状上报(咳嗽、发热等) 数据可视化【附源码、数据库、万字文档】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华