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

如何用 JavaScript 操作 DOM 元素?

如何用 JavaScript 操作 DOM 元素?——结合实际项目代码示例讲解

在前端开发中,DOM(文档对象模型)操作是与页面交互的核心。通过 DOM 操作,开发者可以动态地修改页面内容、响应用户交互、控制样式等。JavaScript 提供了强大的 DOM 操作 API,帮助开发者高效地实现这些功能。

本文将结合实际项目代码示例,系统讲解如何用 JavaScript 操作 DOM 元素。我们将从基础操作开始,逐步深入到更复杂的应用场景。

目录

  1. 引言:什么是 DOM 操作?
  2. DOM 元素的获取
    • getElementById()
    • getElementsByClassName()
    • querySelector()querySelectorAll()
  3. DOM 元素的修改
    • 修改文本内容
    • 修改属性
    • 修改样式
  4. DOM 元素的创建与插入
    • 创建新元素
    • 插入新元素
    • 删除元素
  5. 事件处理与 DOM 操作
  6. 实际项目代码示例
    • 示例 1: 基础 DOM 操作
    • 示例 2: 动态创建元素并插入
    • 示例 3: 事件处理与 DOM 更新
  7. 总结与最佳实践

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 元素的修改

修改文本内容

可以使用 textContentinnerText 修改元素的文本内容。

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() 来绑定事件处理函数,常见的事件包括 clickmouseoverkeydown 等。

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 元素。
  • 修改元素:可以使用 textContentsetAttribute()style 等方法修改元素的内容、属性和样式。

相关文章:

如何用 JavaScript 操作 DOM 元素?

如何用 JavaScript 操作 DOM 元素&#xff1f;——结合实际项目代码示例讲解 在前端开发中&#xff0c;DOM&#xff08;文档对象模型&#xff09;操作是与页面交互的核心。通过 DOM 操作&#xff0c;开发者可以动态地修改页面内容、响应用户交互、控制样式等。JavaScript 提供…...

【Ubuntu】URDC(Ubuntu远程桌面助手)安装、用法,及莫名其妙进入全黑模式的处理

1、简述 URDC是Ubuntu远程桌面助手的简称。 它可以: 实时显示桌面:URDC支持通过Windows连接至Ubuntu设备(包括x86和ARM架构,例如Jetson系列、树莓派等)的桌面及光标。远程操控双向同步剪切板多客户端连接:同一Ubuntu设备最多可同时被三台Windows客户端连接和操控,适用于…...

ES-DSL查询

term查询 因为精确查询的字段搜是不分词的字段&#xff0c;因此查询的条件也必须是不分词的词条。查询时&#xff0c;用户输入的内容跟自动值完全匹配时才认为符合条件。如果用户输入的内容过多&#xff0c;反而搜索不到数据。 语法说明&#xff1a; // term查询 GET /index…...

npm 设置镜像

要在npm中设置镜像&#xff0c;你可以使用npm config命令。以下是设置npm镜像的步骤&#xff1a; 临时使用淘宝镜像&#xff1a; npm --registry https://registry.npmmirror.com install package-name 永久设置镜像&#xff1a; npm config set registry https://registry…...

SpringMvc完整知识点一

SpringMVC概述 定义 SpringMVC是一种基于Java实现MVC设计模型的轻量级Web框架 MVC设计模型&#xff1a;即将应用程序分为三个主要组件&#xff1a;模型&#xff08;Model&#xff09;、视图&#xff08;View&#xff09;和控制器&#xff08;Controller&#xff09;。这种分离…...

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 通道测试 概述 本文…...

【工具】音频文件格式转换工具

找开源资源、下载测试不同库的效果&#xff0c;然后找音频、下载音频、编写代码、测试转换、流程通畅。写一个工具花的时间越来越多了&#xff01;这个 5 天 这个工具是一个音频文件格式转换工具&#xff0c;支持对 mp3.aac.wav.caf.flac.ircam.mp2.mpeg.oga.opus.pcm.ra.spx.…...

ssl证书过期,nginx更换证书以后仍然显示过期证书

记一次nginx部署异常 今天提示ssl证书过期了&#xff0c;然后重新申请了一个证书 反反复复折腾了一个上午&#xff0c;还更换了好几个平台&#xff0c;发现怎么更换都没用&#xff0c;百度上的解决方法都试过了&#xff0c;发现都没用&#xff0c;证书还是显示的原来那一个&…...

原型模式(Prototype Pattern)——对象克隆、深克隆与浅克隆及适用场景

原型模式&#xff08;Prototype Pattern&#xff09;是设计模式中的一种创建型模式&#xff0c;目的是通过复制现有的对象来创建新的对象&#xff0c;而不是通过传统的实例化方式。原型模式常常用于需要创建大量类似对象的场景&#xff0c;可以提高性能并减少资源的消耗。下面将…...

从工标网网站解析标准信息

import requests from bs4 import BeautifulSoup 将标准搜索关键词转化成GBK格式&#xff0c;并用%连接转化后16进制&#xff0c;转化成工标网的查询网址url text “GB/T 9755” utf8_encoded_text text.encode(‘GBK’) #print(utf8_encoded_text) hex_representation ‘…...

如何在MySQL中开启死锁日志及查看日志

在数据库的多用户环境中&#xff0c;死锁是一个常见的问题&#xff0c;它可能会影响到数据库的性能和稳定性。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 需要构建正样本&#xff0c;异常样本&#xff0c;以及对应的Mask...

分类算法中的样本不平衡问题及其解决方案

一、样本不平衡问题概述 在机器学习的分类任务中&#xff0c;样本不平衡是指不同类别训练样本数量存在显著差异的现象。这一差异会给模型训练和性能评估带来挑战&#xff0c;尤其在处理少数类样本时&#xff0c;模型可能难以有效学习其特征。 以二分类为例&#xff0c;理想情况…...

博物馆导览系统方案(一)背景需求分析与核心技术实现

维小帮提供多个场所的室内外导航导览方案&#xff0c;如需获取博物馆导览系统解决方案可前往文章最下方获取&#xff0c;如有项目合作及技术交流欢迎私信我们哦~撒花&#xff01; 一、博物馆导览系统的背景与市场需求 在数字化转型的浪潮中&#xff0c;博物馆作为文化传承和知…...

[创业之路-169]:《BLM战略规划》- 战略洞察 (战略能力中最最核心的能力) - 市场洞察 -1- 看宏观/行业 - 行业:激光器行业的详细分析

目录 一、激光器行业的详细分析 1. 行业总容量分析 2. 行业成长性分析 3. 行业的供需结构 4. 行业的发展阶段与动态S曲线 5. 行业集中度 6. 关键成功因素 二、对深紫外激光器进行如下分析 1、行业总容量分析 2、行业成长性分析 3、行业的供需结构 4、行业的发展阶段…...

抽象工厂模式的理解和实践

在软件开发中&#xff0c;设计模式是解决常见问题的最佳实践。抽象工厂模式是一种创建型设计模式&#xff0c;提供了一种创建一系列相关或相互依赖对象的接口&#xff0c;而无需指定它们的具体类。本文将详细解释抽象工厂模式的概念、结构、优点、缺点&#xff0c;并通过Java代…...

WIDER FACE数据集转YOLO格式

1. 引出问题 本人最近在做毕设相关内容&#xff0c;第一阶段目标是通过目标检测来统计课堂人数&#xff0c;因此需要对人脸和人头进行目标检测。模型方面没什么好说的无脑用YOLO&#xff0c;数据集方面&#xff0c;人脸部分找到了来自港中文的WIDER FACE数据集。但是解压后发现…...

项目启动的基本配置

开启驼峰命名 如果字段名与属性名符合驼峰命名规则&#xff0c;MyBatis会自动通过驼峰命名规则映射。 在application.yml配置文件中&#xff0c;可以添加以下配置来开启驼峰命名规则&#xff1a; mybatis:configuration:map-underscore-to-camel-case: true 这段配置的作用…...

Ubuntu桌面突然卡住,图形界面无反应

1.可能等待几分钟&#xff0c;系统会自动反应过来。你可以选择等待几分钟。 2.绝大多数情况系统是不会反应过来的&#xff0c;这时候可以进入tty终端直接注销用户。 (1)Ubuntu有6个tty终端&#xff0c;按住CtrlAltF1可以进入tty1终端&#xff0c;&#xff08;同理CtrlAltF2&a…...

Next.js系统性教学:拦截路由与路由处理器

更多有关Next.js教程&#xff0c;请查阅&#xff1a; 【目录】Next.js 独立开发系列教程-CSDN博客 目录 1. 路由拦截 (Intercepting Routes) 1.1 什么是路由拦截&#xff1f; 1.2 配置拦截路由 1.3 示例&#xff1a;模态框预览 1.4 使用场景 2. 路由处理器 (Route Handl…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出&#xff1a;JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中&#xff0c;随机数的生成看似简单&#xff0c;却隐藏着许多玄机。无论是生成密码、加密密钥&#xff0c;还是创建安全令牌&#xff0c;随机数的质量直接关系到系统的安全性。Jav…...

【JVM】- 内存结构

引言 JVM&#xff1a;Java Virtual Machine 定义&#xff1a;Java虚拟机&#xff0c;Java二进制字节码的运行环境好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收的功能数组下标越界检查&#xff08;会抛异常&#xff0c;不会覆盖到其他代码…...

STM32---外部32.768K晶振(LSE)无法起振问题

晶振是否起振主要就检查两个1、晶振与MCU是否兼容&#xff1b;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容&#xff08;CL&#xff09;与匹配电容&#xff08;CL1、CL2&#xff09;的关系 2. 如何选择 CL1 和 CL…...

LOOI机器人的技术实现解析:从手势识别到边缘检测

LOOI机器人作为一款创新的AI硬件产品&#xff0c;通过将智能手机转变为具有情感交互能力的桌面机器人&#xff0c;展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家&#xff0c;我将全面解析LOOI的技术实现架构&#xff0c;特别是其手势识别、物体识别和环境…...

实战三:开发网页端界面完成黑白视频转为彩色视频

​一、需求描述 设计一个简单的视频上色应用&#xff0c;用户可以通过网页界面上传黑白视频&#xff0c;系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观&#xff0c;不需要了解技术细节。 效果图 ​二、实现思路 总体思路&#xff1a; 用户通过Gradio界面上…...

深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏

一、引言 在深度学习中&#xff0c;我们训练出的神经网络往往非常庞大&#xff08;比如像 ResNet、YOLOv8、Vision Transformer&#xff09;&#xff0c;虽然精度很高&#xff0c;但“太重”了&#xff0c;运行起来很慢&#xff0c;占用内存大&#xff0c;不适合部署到手机、摄…...

微服务通信安全:深入解析mTLS的原理与实践

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、引言&#xff1a;微服务时代的通信安全挑战 随着云原生和微服务架构的普及&#xff0c;服务间的通信安全成为系统设计的核心议题。传统的单体架构中&…...

GAN模式奔溃的探讨论文综述(一)

简介 简介:今天带来一篇关于GAN的,对于模式奔溃的一个探讨的一个问题,帮助大家更好的解决训练中遇到的一个难题。 论文题目:An in-depth review and analysis of mode collapse in GAN 期刊:Machine Learning 链接:...

前端工具库lodash与lodash-es区别详解

lodash 和 lodash-es 是同一工具库的两个不同版本&#xff0c;核心功能完全一致&#xff0c;主要区别在于模块化格式和优化方式&#xff0c;适合不同的开发环境。以下是详细对比&#xff1a; 1. 模块化格式 lodash 使用 CommonJS 模块格式&#xff08;require/module.exports&a…...

AWS vs 阿里云:功能、服务与性能对比指南

在云计算领域&#xff0c;Amazon Web Services (AWS) 和阿里云 (Alibaba Cloud) 是全球领先的提供商&#xff0c;各自在功能范围、服务生态系统、性能表现和适用场景上具有独特优势。基于提供的引用[1]-[5]&#xff0c;我将从功能、服务和性能三个方面进行结构化对比分析&#…...