文章目录

      • 🧭 一、查询/获取元素 (Selecting Elements)
      • ✏️ 二、修改元素内容与属性 (Modifying Content & Attributes)
      • 🧬 三、创建与插入元素 (Creating & Inserting Elements)
      • 🗑️ 四、删除与替换元素 (Removing & Replacing)
      • 🎛️ 五、操作 CSS 类与样式 (CSS Classes & Styles)
      • 🖱️ 六、事件处理 (Event Handling)
      • 🧮 七、遍历 DOM 树 (Traversing the DOM)
      • 🧪 八、数据属性 (Data Attributes)
      • ⚙️ 九、其他重要操作
      • 💡 关键实践建议

前端操作 DOM 的常见操作主要分为以下几类:


🧭 一、查询/获取元素 (Selecting Elements)

  1. getElementById(id)
    通过元素的唯一 id 获取单个元素:

    const el = document.getElementById('header');
    
  2. querySelector(selector)
    使用 CSS 选择器获取第一个匹配的元素:

    const el = document.querySelector('.menu-item');
    
  3. querySelectorAll(selector)
    获取所有匹配的元素集合(返回 NodeList):

    const items = document.querySelectorAll('li');
    
  4. getElementsByClassName(className)
    通过类名获取元素集合:

    const buttons = document.getElementsByClassName('btn');
    
  5. getElementsByTagName(tagName)
    通过标签名获取元素集合:

    const divs = document.getElementsByTagName('div');
    

✏️ 二、修改元素内容与属性 (Modifying Content & Attributes)

  1. textContent
    安全设置纯文本内容(避免 XSS):

    el.textContent = '新文本内容';
    
  2. innerHTML
    设置 HTML 内容(注意 XSS 风险⚠️):

    el.innerHTML = '<strong>加粗文本</strong>';
    
  3. 修改属性

    img.setAttribute('src', 'new-image.jpg'); // 设置属性
    const link = anchor.getAttribute('href'); // 获取属性
    checkbox.removeAttribute('disabled');     // 移除属性
    
  4. 直接属性访问

    input.value = '新值';
    input.disabled = true;
    

🧬 三、创建与插入元素 (Creating & Inserting Elements)

  1. 创建元素

    const newDiv = document.createElement('div');
    
  2. 插入到 DOM 中

    parent.appendChild(newDiv);                // 插入到末尾
    parent.insertBefore(newDiv, referenceEl);  // 插入到指定元素前
    
  3. insertAdjacentHTML()
    灵活插入 HTML 片段:

    el.insertAdjacentHTML('beforeend', '<p>追加内容</p>');
    
    • 位置可选:beforebeginafterbeginbeforeendafterend

🗑️ 四、删除与替换元素 (Removing & Replacing)

  1. 删除元素

    const oldEl = document.querySelector('.old');
    oldEl.parentNode.removeChild(oldEl); // 传统方式
    oldEl.remove();                      // 现代方式(推荐)
    
  2. 替换元素

    parent.replaceChild(newEl, oldEl);  // 用 newEl 替换 oldEl
    

🎛️ 五、操作 CSS 类与样式 (CSS Classes & Styles)

  1. classList API

    el.classList.add('active');          // 添加类
    el.classList.remove('inactive');     // 移除类
    el.classList.toggle('visible');      // 切换类
    el.classList.contains('hidden');    // 检查类
    
  2. 直接修改行内样式

    el.style.color = 'blue';
    el.style.backgroundColor = '#f0f0f0';
    el.style.setProperty('--primary-color', 'red'); // 修改CSS变量
    

🖱️ 六、事件处理 (Event Handling)

  1. 添加事件监听

    button.addEventListener('click', function(e) {console.log('点击事件触发', e.target);
    });
    
  2. 移除事件监听

    const handler = () => { /* ... */ };
    button.addEventListener('click', handler);
    button.removeEventListener('click', handler);  // 移除指定监听
    
  3. 事件委托(常用优化技术)

    document.body.addEventListener('click', (e) => {if(e.target.matches('.delete-btn')) {deleteItem(e.target.dataset.id);  // 统一处理子元素点击}
    });
    

🧮 七、遍历 DOM 树 (Traversing the DOM)

  1. 父子关系

    const parent = el.parentNode;
    const firstChild = parent.firstChild;
    const children = parent.children; // 只包含元素节点 (HTMLCollection)
    
  2. 兄弟关系

    const nextSibling = el.nextElementSibling; // 下一个元素节点
    const prevSibling = el.previousElementSibling; // 上一个元素节点
    

🧪 八、数据属性 (Data Attributes)

使用 dataset 访问 data-* 属性:

// 操作 <div data-id="123" data-status="active"></div>
const id = div.dataset.id;                // "123"
div.dataset.status = 'inactive';          // 修改值
div.dataset.customValue = 'hello';        // 新增 data-custom-value

⚙️ 九、其他重要操作

  1. 克隆元素

    const clone = el.cloneNode(true); // true 表示深克隆(包含子元素)
    
  2. 比较节点位置

    const isBefore = node1.compareDocumentPosition(node2) === Node.DOCUMENT_POSITION_FOLLOWING;
    
  3. 获取元素位置尺寸

    const rect = el.getBoundingClientRect(); // 包含 left, top, width, height
    

💡 关键实践建议

  1. 性能优化:避免频繁操作 DOM,批量修改时可用 DocumentFragment 减少重排重绘。

    const fragment = document.createDocumentFragment();
    // 多次在 fragment 中添加元素
    parent.appendChild(fragment);
    
  2. 事件委托:对动态元素利用事件委托减少监听器数量。

  3. 框架优势:React/Vue 等框架通过虚拟 DOM 提升性能,减少直接手动操作需求。


总结:DOM 操作是前端基础能力,重点在于灵活选择 API 并结合性能优化实践。熟练后建议通过现代框架(如 React, Vue)减少原生操作复杂度,提升开发效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/92698.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/92698.shtml
英文地址,请注明出处:http://en.pswp.cn/web/92698.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

内存杀手机器:TensorFlow Lite + Spring Boot移动端模型服务深度优化方案

内存杀手机器&#xff1a;TensorFlow Lite Spring Boot移动端模型服务深度优化方案一、系统架构设计1.1 端云协同架构1.2 组件职责矩阵二、TensorFlow Lite深度优化2.1 模型量化策略2.2 模型裁剪技术2.3 模型分片加载三、Spring Boot内存优化3.1 零拷贝内存管理3.2 堆外内存模…

安全生产基础知识(一)

本文档围绕安全生产基础知识展开&#xff1a; 一、安全用电相关知识 用电安全要点 禁止用湿手触摸灯头、开关、插头插座及用电器具。发现有人触电&#xff0c;切勿用手拉扯&#xff0c;应立即拉开电源开关或用干燥木棍、竹竿挑开电线。电器通电后出现冒烟、烧焦味或着火时&…

Elasticsearch 搜索模板(Search Templates)把“可配置查询”装进 Mustache

1. 什么是 Search Template&#xff1f;能解决什么问题&#xff1f; 搜索模板是存储在 ES 集群里的 Mustache 模板&#xff08;lang: mustache&#xff09;。你把一份标准 _search 请求体写成模板&#xff0c;变量交给 params&#xff0c;每次调用只需传参即可&#xff1a; 搜索…

cocos Uncaught TypeError: Cannot read properties of null (reading ‘SetActive‘)

报错&#xff1a;Uncaught TypeError: Cannot read properties of null (reading SetActive) at b2RigidBody2D.setActive (rigid-body.ts:231:21) at b2RigidBody2D.onEnable (rigid-body.ts:78:14) at RigidBody2D.onEnable (rigid-body-2d.ts:551:24) at OneOffInvoker.invo…

Docker用户组介绍以及管理策略

在Docker环境中&#xff0c;用户组&#xff08;尤其是默认的docker组&#xff09;是管理用户与Docker守护进程交互权限的核心机制。以下从概念介绍和具体管理操作两方面详细说明&#xff1a;一、Docker用户组的核心概念 Docker守护进程&#xff08;dockerd&#xff09;默认通过…

【PyTorch】单目标检测项目部署

【PyTorch】单目标检测项目 两种部署情况&#xff1a;部署在 PyTorch 数据集上&#xff0c;以及部署在本地存储的单个映像上。 目录 定义数据集 搭建模型 部署模型 定义数据集 详细参照前文【PyTorch】单目标检测项目 import torchvision import os import pandas as pd i…

Baumer高防护相机如何通过YoloV8深度学习模型实现火星陨石坑的检测识别(C#代码UI界面版)

《------往期经典推荐------》 AI应用软件开发实战专栏【链接】 序号 项目名称 项目名称 1 1.工业相机 + YOLOv8 实现人物检测识别:(C#代码,UI界面版) 2.工业相机 + YOLOv8 实现PCB的缺陷检测:(C#代码,UI界面版) 2 3.工业相机 + YOLOv8 实现动物分类识别:(C#代码,U…

UniApp Vue3 TypeScript项目中使用xgplayer播放m3u8视频的显示问题

问题背景 在UniApp Vue3 TypeScript项目中使用xgplayer播放m3u8视频时&#xff0c;遇到了一个棘手的问题&#xff1a;视频画面下移&#xff0c;只能听到声音&#xff0c;全屏后才能正常显示。经过排查&#xff0c;发现是<video>元素在DOM渲染时被异常定位&#xff0c;导…

服务器硬件电路设计之 I2C 问答(三):I2C 总线上可以接多少个设备?如何保证数据的准确性?

在服务器硬件电路设计中&#xff0c;I2C 总线作为常用的串行通信协议&#xff0c;其设备连接数量和数据准确性至关重要。​I2C 总线上可连接的设备数量并非无限制。从理论上讲&#xff0c;标准 I2C 设备采用 7 位地址&#xff0c;除去保留地址&#xff0c;最多可连接 112 个设备…

用LaTeX优化FPGA开发:结合符号计算与Vivado工具链

用 LaTeX 优化 FPGA 开发&#xff1a;结合符号计算与 Vivado 工具链&#xff08;一&#xff09; 系列文章目录 第一章&#xff1a;深入了解 LaTeX&#xff1a;科技文档排版的利器 第二章&#xff1a;LaTeX 下载安装保姆级教程 第三章&#xff1a;LaTeX 创建工程并生成完整文档…

人工智能系列(6)如何开发有监督神经网络系统?

一. 开发有监督神经网络系统的步骤1. 数据收集训练数据通常由输入–输出成对组成&#xff0c;根据任务需求可能涵盖不同情境&#xff08;如白天或夜晚的车辆识别&#xff09;&#xff0c;其类型可以是数值、图像、音频等多种形式&#xff1b;数据规模越大、越多样&#xff0c;模…

CSS 选择器进阶:用更聪明的方式定位元素

在前端开发中&#xff0c;CSS 选择器是我们与 DOM 对话的语言。虽然 class 和 id 是我们最熟悉的工具&#xff0c;但真正高效、优雅的样式代码&#xff0c;往往来自于对现代 CSS 选择器的深入理解与巧妙运用。本文将带你跳出基础语法&#xff0c;探索那些能显著提升开发效率和代…

常用排序方法

一、排序的概念及引用1、排序的概念排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。稳定性&#xff1a;假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录&…

接口返回504 Gateway Time-out 错误,这意味着请求在网关或代理服务器等待上游服务器响应时超时。以下是可能的原因和排查建议:

问题分析1.后端处理耗时过长是某个方法执行时间过长&#xff0c;超过了网关的超时设置&#xff08;通常是几十秒&#xff09;可能涉及大量数据查询或复杂计算2.数据库查询性能问题查询的数据量过大缺少必要的数据库索引SQL语句执行效率低下排查建议1.检查服务端日志查看应用日志…

DBAPI 实现不同角色控制查看表的不同列

DBAPI 实现不同角色控制查看表的不同列 场景说明 在数据库管理系统中&#xff0c;对表进行列级别的权限控制是一项关键的安全措施&#xff0c;特别是在处理敏感数据或需要遵守特定数据访问控制策略的情况下。合理的列权限控制不仅能保护敏感信息&#xff0c;还能帮助组织满足合…

二维图像处理(完整版)

目录 1.变换矩阵 2.在矩阵的基础上添加各种变换形式 3.开始变换 4.计算变换矩阵参数 新算子 二、阈值分割 新算子 三、blob分析案例 1.焊点 2.石头 3.木材 4.车牌 5.骰子 新算子 四、傅里叶变换频域分析 问题一 五、滤波处理 1.均值滤波 2.中值滤波 3.高斯…

计算机网络:求地址块128.14.35.7/20中的相关信息

128.14.35.7/20是某一地址块&#xff0c;求该地址块中的网络地址&#xff0c;IP地址最大值&#xff0c;最小值&#xff0c;地址数 这里的最大值&#xff1a;广播地址&#xff0c;最小值&#xff1a;网络地址&#xff0c;地址数&#xff1a;可分配主机数 最关键的一步就点分十进…

3深度学习Pytorch-神经网络--全连接神经网络、数据准备(构建数据类Dataset、TensorDataset 和数据加载器DataLoader)

文章目录一、深度学习概述二、神经网络基础人工神经网络&#xff08;ANN&#xff09;基本结构神经网络的构建全连接神经网络&#xff08;FCN&#xff09;计算步骤基本组件1. 线性层组件2. 激活函数&#xff08;Activation Function&#xff09;3. 损失函数&#xff08;Loss Fun…

MyEclipse启动OutOfMemoryError内存溢出

java.lang.OutOfMemoryError&#xff1a;Java heap space打开setting&#xff0c;搜索heap&#xff0c;compiler heap sizejava.lang.OutOfMemoryError&#xff1a;insufficient memory①点击file&#xff0c;选择Invalidate Caches ②点击file->Build,Excetion,Deployment-…

java毕业设计实例-基于springboot的校园资讯分享平台的设计与实现(源码+LW+部署文档+全bao+远程调试+代码讲解等)

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