如何用 JavaScript 操作 DOM 元素?
如何用 JavaScript 操作 DOM 元素?——结合实际项目代码示例讲解
在前端开发中,DOM(文档对象模型)操作是与页面交互的核心。通过 DOM 操作,开发者可以动态地修改页面内容、响应用户交互、控制样式等。JavaScript 提供了强大的 DOM 操作 API,帮助开发者高效地实现这些功能。
本文将结合实际项目代码示例,系统讲解如何用 JavaScript 操作 DOM 元素。我们将从基础操作开始,逐步深入到更复杂的应用场景。
目录
- 引言:什么是 DOM 操作?
- DOM 元素的获取
getElementById()getElementsByClassName()querySelector()与querySelectorAll()
- DOM 元素的修改
- 修改文本内容
- 修改属性
- 修改样式
- DOM 元素的创建与插入
- 创建新元素
- 插入新元素
- 删除元素
- 事件处理与 DOM 操作
- 实际项目代码示例
- 示例 1: 基础 DOM 操作
- 示例 2: 动态创建元素并插入
- 示例 3: 事件处理与 DOM 更新
- 总结与最佳实践
1. 引言:什么是 DOM 操作?
DOM(文档对象模型)是浏览器提供的一种接口,它将 HTML 文档中的每个元素、属性、文本节点都映射为一个对象。在 JavaScript 中,我们可以通过 DOM 操作来访问和修改这些对象,从而动态更新页面内容和响应用户交互。
常见的 DOM 操作包括:
- 获取元素
- 修改元素内容、属性、样式
- 创建和删除元素
- 绑定事件
2. DOM 元素的获取
JavaScript 提供了多种方法来获取页面上的 DOM 元素:
getElementById()
通过元素的 id 获取单个元素。
let element = document.getElementById('myElement');
console.log(element); // 输出对应 id 为 'myElement' 的元素
getElementsByClassName()
通过元素的 class 获取一组元素,返回一个类数组(HTMLCollection)。
let elements = document.getElementsByClassName('myClass');
console.log(elements); // 输出所有类名为 'myClass' 的元素
querySelector() 与 querySelectorAll()
querySelector()获取第一个匹配的元素。querySelectorAll()获取所有匹配的元素,返回一个 NodeList(类数组)。
let firstDiv = document.querySelector('div');
console.log(firstDiv); // 输出第一个 <div> 元素let allDivs = document.querySelectorAll('div');
console.log(allDivs); // 输出所有 <div> 元素
3. DOM 元素的修改
修改文本内容
可以使用 textContent 或 innerText 修改元素的文本内容。
let element = document.getElementById('myElement');
element.textContent = '新的文本内容'; // 修改文本
修改属性
可以通过 setAttribute() 和 getAttribute() 修改或获取元素的属性值。
let imgElement = document.querySelector('img');
imgElement.setAttribute('src', 'newImage.jpg'); // 修改图片路径let srcValue = imgElement.getAttribute('src'); // 获取当前图片路径
console.log(srcValue); // 输出: 'newImage.jpg'
修改样式
可以使用 style 属性直接修改内联样式,或者通过 classList 操作类名来修改样式。
let div = document.getElementById('myDiv');
div.style.backgroundColor = 'red'; // 修改背景色// 使用 classList 操作类名
div.classList.add('newClass'); // 添加类
div.classList.remove('oldClass'); // 移除类
4. DOM 元素的创建与插入
创建新元素
可以使用 document.createElement() 创建新的 HTML 元素。
let newDiv = document.createElement('div');
newDiv.textContent = '这是一个新创建的 div 元素';
document.body.appendChild(newDiv); // 将新元素添加到页面中
插入新元素
可以使用 appendChild() 将新元素插入到父元素中,或者使用 insertBefore() 在指定位置插入元素。
let parent = document.getElementById('parentElement');
let newDiv = document.createElement('div');
newDiv.textContent = '新插入的元素';// 将新元素添加到父元素的末尾
parent.appendChild(newDiv);// 在父元素的第一个子元素前插入新元素
let firstChild = parent.firstChild;
parent.insertBefore(newDiv, firstChild);
删除元素
使用 removeChild() 删除元素,或者直接使用 remove() 删除元素本身。
let elementToRemove = document.getElementById('elementToDelete');
elementToRemove.remove(); // 直接删除该元素// 或者通过父元素删除
let parent = document.getElementById('parentElement');
parent.removeChild(elementToRemove);
5. 事件处理与 DOM 操作
JavaScript 可以通过事件处理器来响应用户的操作(如点击、键盘输入等)。
绑定事件
使用 addEventListener() 来绑定事件处理函数,常见的事件包括 click、mouseover、keydown 等。
let button = document.getElementById('myButton');
button.addEventListener('click', function() {alert('按钮被点击了!');
});
事件对象
事件处理函数可以接收一个事件对象作为参数,该对象包含了有关事件的详细信息。
let button = document.getElementById('myButton');
button.addEventListener('click', function(event) {console.log(event.target); // 输出触发事件的元素console.log(event.type); // 输出事件类型,'click'
});
6. 实际项目代码示例
示例 1: 基础 DOM 操作
假设我们需要实现一个简单的交互:点击按钮时,修改某个元素的文本和样式。
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>DOM 操作示例</title>
</head>
<body><div id="message">点击按钮改变文本</div><button id="changeTextBtn">改变文本</button><script>let button = document.getElementById('changeTextBtn');button.addEventListener('click', function() {let messageDiv = document.getElementById('message');messageDiv.textContent = '文本已被修改!';messageDiv.style.color = 'blue';});</script>
</body>
</html>
示例 2: 动态创建元素并插入
我们需要在页面加载时动态生成并插入一个列表。
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>动态创建列表</title>
</head>
<body><ul id="itemList"></ul><script>let items = ['苹果', '香蕉', '橙子'];let ul = document.getElementById('itemList');items.forEach(function(item) {let li = document.createElement('li');li.textContent = item;ul.appendChild(li);});</script>
</body>
</html>
示例 3: 事件处理与 DOM 更新
我们要实现一个简单的计数器,点击按钮时数字加一。
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>计数器</title>
</head>
<body><div id="counter">0</div><button id="incrementBtn">加一</button><script>let counterDiv = document.getElementById('counter');let button = document.getElementById('incrementBtn');let count = 0;button.addEventListener('click', function() {count++;counterDiv.textContent = count;});</script>
</body>
</html>
7. 总结与最佳实践
- 获取元素:可以通过
getElementById()、querySelector()等方法获取 DOM 元素。 - 修改元素:可以使用
textContent、setAttribute()、style等方法修改元素的内容、属性和样式。
相关文章:
如何用 JavaScript 操作 DOM 元素?
如何用 JavaScript 操作 DOM 元素?——结合实际项目代码示例讲解 在前端开发中,DOM(文档对象模型)操作是与页面交互的核心。通过 DOM 操作,开发者可以动态地修改页面内容、响应用户交互、控制样式等。JavaScript 提供…...
【Ubuntu】URDC(Ubuntu远程桌面助手)安装、用法,及莫名其妙进入全黑模式的处理
1、简述 URDC是Ubuntu远程桌面助手的简称。 它可以: 实时显示桌面:URDC支持通过Windows连接至Ubuntu设备(包括x86和ARM架构,例如Jetson系列、树莓派等)的桌面及光标。远程操控双向同步剪切板多客户端连接:同一Ubuntu设备最多可同时被三台Windows客户端连接和操控,适用于…...
ES-DSL查询
term查询 因为精确查询的字段搜是不分词的字段,因此查询的条件也必须是不分词的词条。查询时,用户输入的内容跟自动值完全匹配时才认为符合条件。如果用户输入的内容过多,反而搜索不到数据。 语法说明: // term查询 GET /index…...
npm 设置镜像
要在npm中设置镜像,你可以使用npm config命令。以下是设置npm镜像的步骤: 临时使用淘宝镜像: npm --registry https://registry.npmmirror.com install package-name 永久设置镜像: npm config set registry https://registry…...
SpringMvc完整知识点一
SpringMVC概述 定义 SpringMVC是一种基于Java实现MVC设计模型的轻量级Web框架 MVC设计模型:即将应用程序分为三个主要组件:模型(Model)、视图(View)和控制器(Controller)。这种分离…...
STM32G4系列MCU双ADC多通道数据转换的应用
目录 概述 1 STM32Cube配置项目 1.1 基本参数配置 1.1.1 ADC1参数配置 1.1.2 ADC2参数配置 1.2 项目软件架构 2 功能实现 2.1 ADC转换初始化 2.2 ADC数据组包 3 测试函数 3.1 Vofa数据接口 3.2 输入数据 4 测试 4.1 ADC1 通道测试 4.2 ADC2 通道测试 概述 本文…...
【工具】音频文件格式转换工具
找开源资源、下载测试不同库的效果,然后找音频、下载音频、编写代码、测试转换、流程通畅。写一个工具花的时间越来越多了!这个 5 天 这个工具是一个音频文件格式转换工具,支持对 mp3.aac.wav.caf.flac.ircam.mp2.mpeg.oga.opus.pcm.ra.spx.…...
ssl证书过期,nginx更换证书以后仍然显示过期证书
记一次nginx部署异常 今天提示ssl证书过期了,然后重新申请了一个证书 反反复复折腾了一个上午,还更换了好几个平台,发现怎么更换都没用,百度上的解决方法都试过了,发现都没用,证书还是显示的原来那一个&…...
原型模式(Prototype Pattern)——对象克隆、深克隆与浅克隆及适用场景
原型模式(Prototype Pattern)是设计模式中的一种创建型模式,目的是通过复制现有的对象来创建新的对象,而不是通过传统的实例化方式。原型模式常常用于需要创建大量类似对象的场景,可以提高性能并减少资源的消耗。下面将…...
从工标网网站解析标准信息
import requests from bs4 import BeautifulSoup 将标准搜索关键词转化成GBK格式,并用%连接转化后16进制,转化成工标网的查询网址url text “GB/T 9755” utf8_encoded_text text.encode(‘GBK’) #print(utf8_encoded_text) hex_representation ‘…...
如何在MySQL中开启死锁日志及查看日志
在数据库的多用户环境中,死锁是一个常见的问题,它可能会影响到数据库的性能和稳定性。MySQL提供了一些工具和命令来帮助我们识别和解决死锁问题。本文将介绍如何在MySQL中开启死锁日志以及如何查看这些日志。 一、为什么需要死锁日志 死锁是指两个或多…...
VCP-CLIP A visual context prompting modelfor zero-shot anomaly segmentation
GitHub - xiaozhen228/VCP-CLIP: (ECCV 2024) VCP-CLIP: A visual context prompting model for zero-shot anomaly segmentation 需要构建正样本,异常样本,以及对应的Mask...
分类算法中的样本不平衡问题及其解决方案
一、样本不平衡问题概述 在机器学习的分类任务中,样本不平衡是指不同类别训练样本数量存在显著差异的现象。这一差异会给模型训练和性能评估带来挑战,尤其在处理少数类样本时,模型可能难以有效学习其特征。 以二分类为例,理想情况…...
博物馆导览系统方案(一)背景需求分析与核心技术实现
维小帮提供多个场所的室内外导航导览方案,如需获取博物馆导览系统解决方案可前往文章最下方获取,如有项目合作及技术交流欢迎私信我们哦~撒花! 一、博物馆导览系统的背景与市场需求 在数字化转型的浪潮中,博物馆作为文化传承和知…...
[创业之路-169]:《BLM战略规划》- 战略洞察 (战略能力中最最核心的能力) - 市场洞察 -1- 看宏观/行业 - 行业:激光器行业的详细分析
目录 一、激光器行业的详细分析 1. 行业总容量分析 2. 行业成长性分析 3. 行业的供需结构 4. 行业的发展阶段与动态S曲线 5. 行业集中度 6. 关键成功因素 二、对深紫外激光器进行如下分析 1、行业总容量分析 2、行业成长性分析 3、行业的供需结构 4、行业的发展阶段…...
抽象工厂模式的理解和实践
在软件开发中,设计模式是解决常见问题的最佳实践。抽象工厂模式是一种创建型设计模式,提供了一种创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。本文将详细解释抽象工厂模式的概念、结构、优点、缺点,并通过Java代…...
WIDER FACE数据集转YOLO格式
1. 引出问题 本人最近在做毕设相关内容,第一阶段目标是通过目标检测来统计课堂人数,因此需要对人脸和人头进行目标检测。模型方面没什么好说的无脑用YOLO,数据集方面,人脸部分找到了来自港中文的WIDER FACE数据集。但是解压后发现…...
项目启动的基本配置
开启驼峰命名 如果字段名与属性名符合驼峰命名规则,MyBatis会自动通过驼峰命名规则映射。 在application.yml配置文件中,可以添加以下配置来开启驼峰命名规则: mybatis:configuration:map-underscore-to-camel-case: true 这段配置的作用…...
Ubuntu桌面突然卡住,图形界面无反应
1.可能等待几分钟,系统会自动反应过来。你可以选择等待几分钟。 2.绝大多数情况系统是不会反应过来的,这时候可以进入tty终端直接注销用户。 (1)Ubuntu有6个tty终端,按住CtrlAltF1可以进入tty1终端,(同理CtrlAltF2&a…...
Next.js系统性教学:拦截路由与路由处理器
更多有关Next.js教程,请查阅: 【目录】Next.js 独立开发系列教程-CSDN博客 目录 1. 路由拦截 (Intercepting Routes) 1.1 什么是路由拦截? 1.2 配置拦截路由 1.3 示例:模态框预览 1.4 使用场景 2. 路由处理器 (Route Handl…...
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...
代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...
ubuntu22.04 安装docker 和docker-compose
首先你要确保没有docker环境或者使用命令删掉docker sudo apt-get remove docker docker-engine docker.io containerd runc安装docker 更新软件环境 sudo apt update sudo apt upgrade下载docker依赖和GPG 密钥 # 依赖 apt-get install ca-certificates curl gnupg lsb-rel…...
Matlab实现任意伪彩色图像可视化显示
Matlab实现任意伪彩色图像可视化显示 1、灰度原始图像2、RGB彩色原始图像 在科研研究中,如何展示好看的实验结果图像非常重要!!! 1、灰度原始图像 灰度图像每个像素点只有一个数值,代表该点的亮度(或…...
【Java多线程从青铜到王者】单例设计模式(八)
wait和sleep的区别 我们的wait也是提供了一个还有超时时间的版本,sleep也是可以指定时间的,也就是说时间一到就会解除阻塞,继续执行 wait和sleep都能被提前唤醒(虽然时间还没有到也可以提前唤醒),wait能被notify提前唤醒…...
欢乐熊大话蓝牙知识17:多连接 BLE 怎么设计服务不会乱?分层思维来救场!
多连接 BLE 怎么设计服务不会乱?分层思维来救场! 作者按: 你是不是也遇到过 BLE 多连接时,调试现场像网吧“掉线风暴”? 温度传感器连上了,心率带丢了;一边 OTA 更新,一边通知卡壳。…...
RLHF vs RLVR:对齐学习中的两种强化方式详解
在语言模型对齐(alignment)中,强化学习(RL)是一种重要的策略。而其中两种典型形式——RLHF(Reinforcement Learning with Human Feedback) 与 RLVR(Reinforcement Learning with Ver…...
【Zephyr 系列 16】构建 BLE + LoRa 协同通信系统:网关转发与混合调度实战
🧠关键词:Zephyr、BLE、LoRa、混合通信、事件驱动、网关中继、低功耗调度 📌面向读者:希望将 BLE 和 LoRa 结合应用于资产追踪、环境监测、远程数据采集等场景的开发者 📊篇幅预计:5300+ 字 🧭 背景与需求 在许多 IoT 项目中,单一通信方式往往难以兼顾近场数据采集…...
