当前位置: 首页 > 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…...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO&#xff1a;支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题&#xff1a;MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者&#xff1a;Yanyuan Chen, Dexuan Xu, Yu Hu…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

C++.OpenGL (14/64)多光源(Multiple Lights)

多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...