​​解锁 JavaScript DOM:节点操作的核心方法与最佳实践

引言

在当今动态化的 Web 世界中,用户早已不满足于静态的网页展示,而是期待流畅的交互体验——点击按钮弹出菜单、滚动页面加载数据、实时搜索过滤内容……这些功能的背后,都离不开 ​JavaScript DOM(文档对象模型)操作

DOM 是浏览器将 HTML 文档解析成的树状结构,而 JavaScript 则赋予我们“操控这棵树”的能力。无论是动态更新内容、响应用户事件,还是构建复杂的单页应用(SPA),​DOM 节点操作都是前端工程师的核心技能之一。

一、节点操作

如果把网页比作一座房子,那么DOM节点就是搭建这座房子的"乐高积木"。在浏览器渲染网页时,它会将HTML文档解析成一个由各种节点组成的树状结构,这就是我们所说的文档对象模型(DOM)。

  1. 文档节点(Document Node):树的根节点,代表整个HTML文档。
  2. 元素节点(Element Node):代表HTML元素,例如<div>、<p>、<a>等。
  3. 属性节点(Attribute Node):代表HTML元素的属性,例如id、class、href等。
  4. 文本节点(Text Node):代表HTML元素中的文本内容。
  5. 注释节点(CommentNodes):代表注释

二、获取dom

2.1 childNodes 

元素的子节点,包括元素节点和文本节点等。

示例:

<body><div class="father"><div class="child1"></div><div class="child2"></div><div class="child3"></div><div class="child4"></div><div class="child5"></div></div><script>var father = document.querySelector('.father');console.log(father.childNodes); </script>
</body>

在控制台输出:

因为div的代码间存在回车空格,所以会出现六个text文本节点,删掉回车就不存在文本节点。

2.2 children

获取所有子元素节点(只包括元素节点)。

示例:

<body><div class="father"><div class="child1">one</div><div class="child2">two</div><div class="child3">three</div><div class="child4">four</div><div class="child5">five</div></div><script>var father = document.querySelector('.father');console.log(father.children); var children = father.children;console.log(children[2]);</script>

在控制台输出: 

 2.3 parentElement

获取最近的父元素节点。

示例:

<body><div class="father"><div class="child1">one</div><div class="child2">two</div><div class="child3">three</div><div class="haha"></div><div class="child4">four</div><div class="child5">five</div></div><script>var haha = document.querySelector('.haha');console.log(haha.parentElement);console.log(haha.parentElement.children[0]);</script>
</body>

在控制台输出:

可以通过父元素找到其任意一个子元素。

2.4 firstElementChild

获取第一个子元素节点。

示例:

var father = document.querySelector('.father');
console.log(father.firstElementChild);

在控制台输出:

2.5 lastElementChild

获取最后一个子元素节点

示例:

var father = document.querySelector('.father');
console.log(father.lastElementChild);

在控制台输出:

2.6 nextElementSibling

获取下一个兄弟元素。

示例:

 var haha = document.querySelector('.haha');console.log(haha.nextElementSibling);

在控制台输出:

2.6 previousElementSibling

获取上一个兄弟元素。

示例:

var haha = document.querySelector('.haha');console.log(haha.previousElementSibling);

在控制台输出:

三、dom的操作

在网页开发中,​DOM节点的创建与添加是实现动态交互的基础。

3.1 创建dom

createElement()

形式:document.createElement("tagName")

3.2 添加dom

appendChild()

在目标元素内部的最后添加一个元素。

形式:element.appendChild(node)

示例:

<body><div class="father"><div class="child1">one</div><div class="child2">two</div><div class="child3">three</div><div class="haha"></div><div class="child4">four</div><div class="child5">five</div></div><div class="add" onclick="add()">给父视图添加一个子视图</div><script>function add(){//创建元素节点 替代旧的innerHTMLvar child = document.createElement('div');child.innerText = '我是新创建的';//添加节点father.appendChild(child);}</script>
</body>

在前端显示:

◾prepend()

在目标元素内部的最前添加一个元素。

形式:element.prepend(node)

示例:

<body><div class="father"><div class="child1">one</div><div class="child2">two</div><div class="child3">three</div><div class="haha"></div><div class="child4">four</div><div class="child5">five</div></div><div class="add" onclick="add()">给父视图添加一个子视图</div><script>function add(){//创建元素节点 替代旧的innerHTMLvar child = document.createElement('div');child.innerText = '我是新创建的';//添加节点father.prepend(child);}</script>
</body>

在前端显示:

3.3 删除dom

remove()

形式:element.remove()

示例:

    var father = document.querySelector('.father');var children = father.children;children[1].remove();

前端显示:

3.4 克隆dom

cloneNode()

形式:element.cloneNode(deep)

⚪deep:false(默认值) - 复制元素; true - 复制元素和内容

示例:

var brother = children[0].cloneNode(true);
console.log(brother);

在控制台输出:

总结

DOM(文档对象模型)是JavaScript操作网页内容的核心,通过它我们可以动态地访问、修改、添加或删除页面元素。掌握DOM操作,能让你的网页“活”起来,实现交互效果与数据动态更新。

虽然初学可能觉得有些抽象,但多练习几次就会得心应手!DOM是前端开发的必备技能,也是迈向更复杂框架(如React、Vue)的基础。不妨动手写个小demo试试,你会发现它其实很有趣!

继续探索吧,未来的前端大神就是你!​ 💪🚀

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

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

相关文章

Android 12系统源码_系统启动(二)Zygote进程

前言 Zygote&#xff08;意为“受精卵”&#xff09;是 Android 系统中的一个核心进程&#xff0c;负责 孵化&#xff08;fork&#xff09;应用进程&#xff0c;以优化应用启动速度和内存占用。它是 Android 系统启动后第一个由 init 进程启动的 Java 进程&#xff0c;后续所有…

精华贴分享|从不同的交易理论来理解头肩形态,殊途同归

本文来源于量化小论坛策略分享会板块精华帖&#xff0c;作者为孙小迪&#xff0c;发布于2025年2月17日。 以下为精华帖正文&#xff1a; 01 前言 学习了一段时间交易后&#xff0c;我发现在几百年的历史中&#xff0c;不同门派的交易理论对同一种市场特征的称呼不一样&#x…

C++智能指针万字详细讲解(包含智能指针的模拟实现)

在笔试&#xff0c;面试中智能指针经常出现&#xff0c;如果你对智能指针的作用&#xff0c;原理&#xff0c;用法不了解&#xff0c;那么可以看看这篇博客讲解&#xff0c;此外本博客还简单模拟实现了各种指针&#xff0c;在本篇的最后还应对面试题对智能指针的知识点进行了拓…

学习threejs,使用多面体(IcosahedronGeometry、TetrahedronGeometry、OctahedronGeometry等)

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.PolyhedronGeometry …

DeepSeek详解:探索下一代语言模型

文章目录 前言一、什么是DeepSeek二、DeepSeek核心技术2.1 Transformer架构2.1.1 自注意力机制 (Self-Attention Mechanism)(a) 核心思想(b) 计算过程(c) 代码实现 2.1.2 多头注意力 (Multi-Head Attention)(a) 核心思想(b) 工作原理(c) 数学描述(d) 代码实现 2.1.3 位置编码 (…

【目标检测】【深度学习】【Pytorch版本】YOLOV1模型算法详解

【目标检测】【深度学习】【Pytorch版本】YOLOV1模型算法详解 文章目录 【目标检测】【深度学习】【Pytorch版本】YOLOV1模型算法详解前言YOLOV1的模型结构YOLOV1模型的基本执行流程YOLOV1模型的网络参数YOLOV1模型的训练方式 YOLOV1的核心思想前向传播阶段网格单元(grid cell)…

网络运维学习笔记(DeepSeek优化版) 022 HCIP-Datacom路由概念、BFD协议详解与OSPF第一课

文章目录 路由概念、BFD协议详解与OSPF第一课一、路由协议优先级与选路原则1.1 路由协议优先级对照表1.2 路由选路核心原则 二、BFD&#xff08;Bidirectional Forwarding Detection&#xff0c;双向转发检测&#xff09;的配置与应用2.1 双向心跳探测&#xff08;双端配置&…

单应性矩阵(homography)

利用单应性矩阵计算内外参矩阵 利用单应性矩阵解决问题 问题描述&#xff1a;

Scavenge算法的优缺点问题

Scavenge 的缺点是只能使用堆内存中的一半&#xff0c;这是由划分空间和复制机制所决定的。但 Scavenge 由于只复制存活的对象&#xff0c;并且对于生命周期短的场景&#xff0c;存活对象只占少部分&#xff0c;所以它在时间效率上有优异的表现。 由于 Scavenge 是典型的牺牲空…

丝杆支撑座间隙调整不当会带来哪些影响?

丝杆支撑座是一种用于支撑滚珠丝杆的零件&#xff0c;通常用于机床、数控机床、自动化生产线等高精度机械设备中。支撑座间隙调整不当会对机械设备的运行产生多方面的影响&#xff0c;接下来一起了解一下&#xff1a; 1、降低加工精度&#xff1a;在机械加工设备中&#xff0c;…

Unity:EasyRoad3D插件学习 二期

前言&#xff1a; 书接上回。 一、场景视图状态&#xff1a; 创建好道路以后&#xff0c;切换到第一个选项&#xff0c;场景视图状态&#xff0c;查看道路信息&#xff0c;Main Settings修改道路名称、类型&#xff0c;宽度&#xff0c;是否闭环。 RoadWidth改为15&#xff…

内网渗透-DLL和C语言加载木马

免杀进阶技术 1、DLL的定义与使用 DLL:Dynamic Link library,动态链接库&#xff0c;是一个无法自己运行&#xff0c;需要额外的命令或程序来对其接口进行调用&#xff08;类方法、函数&#xff09;。 (1)在DevCpp中创建一个DLL项目 (2)在dllmain.c中定义源代码函数接口 #i…

一洽让常见问题的快速咨询,触手可及

在客户服务场景中&#xff0c;重复性常见问题的处理效率直接影响用户体验与客服成本。针对重复性常见问题&#xff0c;如何以直观的方式呈现给用户&#xff0c;使其能够快速、精准地提出咨询&#xff0c;已成为提升客户满意度的关键因素。 一、传统客服模式的效率枷锁 用户咨…

WEB攻防-Java安全SPEL表达式SSTI模版注入XXEJDBCMyBatis注入

目录 靶场搭建 JavaSec ​编辑​编辑 Hello-Java-Sec(可看到代码对比) SQL注入-JDBC(Java语言连接数据库) 1、采用Statement方法拼接SQL语句 2.PrepareStatement会对SQL语句进行预编译&#xff0c;但如果直接采取拼接的方式构造SQL&#xff0c;此时进行预编译也无用。 3、…

树莓集团南京园区启航:数字经济新地标!

深耕数字产业&#xff0c;构筑生态闭环 树莓集团在数字产业领域拥有超过十年的深厚积累&#xff0c;专注于构建“数字产业”的融合生态链。其核心优势在于有效整合政府、产业、企业及高校资源&#xff0c;形成一个协同创新、价值共生的产业生态闭环系统。 赋能转型&#xff0c…

Redis之bimap/hyperloglog/GEO

bimap/hyperloglog/GEO的真实需求 这些需求的痛点&#xff1a;亿级数据的收集清洗统计展现。一句话&#xff1a;存的进取得快多维度 真正有价值的是统计。 统计的类型 亿级系统中常见的四种统计 聚合统计 统计多个集合元素的聚合结果&#xff0c;就是交差并等集合统计。 排…

nara wpe去混响学习笔记

文章目录 1.WPE方法去混响的基本流程1.1.基本流程 2.离线迭代方法3.在线求法3.1.回顾卡尔曼方法3.2.在线去混响递推滤波器G方法 nara wpe git地址 博客中demo代码下载 参考论文 NARA - WPE: A Python Package for Weighted Prediction Error Dereverberation in Numpy and Ten…

JavaScript函数、箭头函数、匿名函数

1.示例代码(包括用法和注意事项) <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>JS-函数</title…

练习:求平方根

需求&#xff1a;键盘录入一个大于等于2的整数x&#xff0c;计算并返回x的平方根。结果只保留整数部分&#xff0c;小数部分将被舍去。 代码一&#xff1a; //求平方根 //方法一&#xff1a; package Online; import java.util.Scanner; public class SquareRoot {public sta…

win10 安装后的 系统盘的 分区

win10 安装后的 系统盘的 分区 MBR 分区 GPT 分区