news 2026/5/1 1:53:56

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/4/26 7:57:32

ScalingLaws-2022-Chinchilla-2:既然Dₒₚₜ/Nₒₚₜ≈20,为什么LLaMA系列用的D/N远大于20【Chinchilla比例:每个参数大约对应20个token】

“每个参数大约对应 20 个 token”(常被叫作 Chinchilla 比例)并不是一条“宇宙定律”。 你看到 LLaMA 系列的 token/参数 比值远大于 20,核心原因是:他们优化的目标、约束条件、以及用来拟合的“最优前沿(frontier)”都变了。 尤其从 Llama 3 开始,论文里甚至明确承认…

作者头像 李华
网站建设 2026/4/30 6:34:42

HTTP Content-Type

HTTP Content-Type 引言 HTTP协议中的Content-Type头字段是Web服务器与客户端之间进行数据交换的重要机制。它定义了服务器发送给客户端数据的类型,允许浏览器或其他客户端应用程序正确地处理和展示这些数据。本文将详细介绍HTTP Content-Type的用途、类型以及在实际应用中的…

作者头像 李华
网站建设 2026/5/1 9:50:39

VSCode 下如何检查 Vue 项目中未使用的依赖?

VSCode 下如何检查 Vue 项目中未使用的依赖&#xff1f; 文章目录 VSCode 下如何检查 Vue 项目中未使用的依赖&#xff1f;1. 使用 depcheck 工具&#xff08;推荐&#xff09;安装和使用&#xff1a;配置&#xff08;可选&#xff09;&#xff1a; 2. 使用 npm-check 工具3. V…

作者头像 李华
网站建设 2026/4/25 18:59:04

SSM计算机毕设之基于ssm的网上手机商城系统基于SSM的手机商城(完整前后端代码+说明文档+LW,调试定制等)

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

作者头像 李华
网站建设 2026/4/30 2:52:13

开题报告 雅韵古诗词系统python爬虫

目录 雅韵古诗词系统Python爬虫简介爬虫技术实现要点数据处理与存储反爬策略应对应用场景扩展 项目技术支持可定制开发之功能亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作 雅韵古诗词系统Python爬虫简介 雅韵古诗词系统是一个基于Py…

作者头像 李华
网站建设 2026/5/1 15:07:44

SSM计算机毕设之基于SSM的疫情健康上报管理系统行程上报、健康上报(完整前后端代码+说明文档+LW,调试定制等)

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

作者头像 李华