JavaScript之DOM操作获取元素、事件、操作元素、节点操作

article/2025/10/19 14:15:29

什么是 DOM?

文档对象模型(Document Object Model,简称 DOM),是 W3C 组织推荐的处理可扩展标记语言(HTML或者XML)的标准编程接口。W3C 已经定义了一系列的 DOM 接口,通过这些 DOM 接口可以改变网页的内容、结构和样式

DOM 树

文档:一个页面就是一个文档,DOM 中使用 document 表示

元素:页面中的所有标签都是元素,DOM 中使用 element 表示

 节点:网页中的所有内容都是节点(标签、属性、文本、注释等),DOM 中使用 node 表示

DOM 把以上内容都看做是对象

46e00f9b9a264f76a7da3c9da6a6d66c.png

如何获取页面元素

DOM在我们实际开发中主要用来操作元素。

获取页面中的元素可以使用以下几种方式:

根据ID 获取

根据标签名获取

通过HTML5新增的方法获取

特殊元素获取

根据 ID 获取

使用 getElementById() 方法可以获取带有 ID 的元素对象

使用 console.dir() 可以打印我们获取的元素对象,更好的查看对象里面的属性和方法。

909f6a5813ec4c0ca7c0c4fbc46ea83a.png

根据标签名获取

使用 getElementsByTagName() 方法可以返回带有指定标签名的对象的集合。

注意: 

1.因为得到的是一个对象的集合,所以我们想要操作里面的元素就需要遍历。

2.得到元素对象是动态的

3.如果获取不到元素,则返回为空的伪数组(因为获取不到对象)

07f858b622784b6982eb87f2eca26c3b.png

注意:父元素必须是单个对象(必须指明是哪一个元素对象). 获取的时候不包括父元素自己。

通过 HTML5 新增的方法获取

1. document.getElementsByClassName(‘类名’);// 根据类名返回元素对象集合

2. document.querySelector('选择器'); // 根据指定选择器返回第一个元素对象

3. document.querySelectorAll('选择器'); // 根据指定选择器返回

注意: querySelector 和 querySelectorAll里面的选择器需要加符号,如:document.querySelector('#nav');

d75d9b95c4af4e20aae10cc751d2fc8a.png

获取特殊元素(body,html)

获取body元素

1. doucumnet.body // 返回body元素对象

获取html元素

1. document.documentElement // 返回html元素对象

3a6c3697ef344d2d89065e30800d493b.png

事件概述

JavaScript 使我们有能力创建动态页面,而事件是可以被 JavaScript 侦测到的行为。

简单理解: 触发--- 响应机制。

网页中的每个元素都可以产生某些可以触发 JavaScript 的事件,例如,我们可以在用户点击某按钮时产生一个 事件,然后去执行某些操作。

事件三要素

1. 事件源 (谁)

2. 事件类型 (什么事件)

3. 事件处理程序 (做啥)

29fece682f5649e8a6b439fa6906afd5.png

操作元素之改变元素内容

d406e926295346148ea1f620e8ed537d.png

常见的鼠标事件

ba1478aa2f934533852b99d45306ec7a.png

javaScript 的 DOM 操作可以改变网页内容、结构和样式,我们可以利用 DOM 操作元素来改变元素里面的内容 、属性等。注意以下都是属性

改变元素内容

48ff08f1b42e45839768599f77f76b78.png

 innerText和innerHTML的区别.html

3df8a279dae6439bb70872883e684cd3.png

操作元素修改元素属性

b853b630518d4fd184e8d1d2098dfd1e.png

分时问候并显示不同图片案例

3db1c75d2c534b22886e74f73e1387e1.png

表单元素的属性操作

利用 DOM 可以操作如下表单元素的属性:

7596b33aa18041aca1a2e97faee9bc1d.png

操作元素之表单属性设置

3d2a24685bf44758adfaa9977869c6ba.png

仿京东显示隐藏密码

ae0c2bf5743b4731b182eee430ada2b0.png

样式属性操作:可以通过 JS 修改元素的大小、颜色、位置等样式

注意:

1.JS 里面的样式采取驼峰命名法 比如 fontSize、 backgroundColor

2.JS 修改 style 样式操作,产生的是行内样式,CSS 权重比较高

74ec5c7beb6c4933b6ae8d584f6a5540.png

88e0baebe2364cb88ffd6e818abb5b68.png 

关闭淘宝二维码案例

dfd0f3780dcc4e7b97b774276c4b1332.png

显示隐藏文本框内容

0ca43fb957f044b485b6b9edfc82459f.png

 e1265003337f4197a04fe6d7e8134bd5.png

操作元素总结

f6d43939079c4bb59e4b810844b77e0b.png

通过className更改元素样式

141cf1927b1a4567a5c8bee59f890e72.png

开关灯例子

2e1ed6849d144ae6bd2b66e4603d6ae6.png

排他思想:

如果有同一组元素,我们想要某一个元素实现某种样式, 需要用到循环的排他思想算法:

1. 所有元素全部清除样式(干掉其他人)

2. 给当前元素设置样式 (留下我自己)

3. 注意顺序不能颠倒,首先干掉其他人,再设置自己

e5f86fa57f9041af816f21ae05084ef6.png

换皮肤例子

0363467e4f6746509915c85f65a9a2d5.png

表格换行变色

ca45e85230704765b961f5e8a44810bc.png

全选框与复选框:

9196468e94bd4801a20d05710a893e3e.png

自定义属性的操作:

获取属性值

element.属性 获取属性值。

element.getAttribute('属性');

区别:

element.属性 获取内置属性值(元素本身自带的属性)

element.getAttribute(‘属性’); 主要获得自定义的属性 (标准) 我们程序员自定义的属性

移除属性

element.removeAttribute('属性');

dc77f89c5d334dd3ab7aff5b985554c7.png

tab栏切换:

688bf45fbaf44f0cbb7858458c23a8c7.png 

H5自定义属性

自定义属性目的:是为了保存并使用数据。有些数据可以保存到页面中而不用保存到数据库中。

自定义属性获取是通过getAttribute(‘属性’) 获取。

但是有些自定义属性很容易引起歧义,不容易判断是元素的内置属性还是自定义属性。

H5给我们新增了自定义属性:

设置H5自定义属性

H5规定自定义属性data-开头做为属性名并且赋值。

比如 <div data-index=“1”></div>

或者使用 JS 设置  

element.setAttribute(‘data-index’, 2)

a4c4d5a9c04d4808b3f8abfab205568f.png

节点操作

利用节点层级关系获取元素

利用父子兄节点关系获取元素

逻辑性强, 但是兼容性稍差

网页中的所有内容都是节点(标签、属性、文本、注释等),在DOM 中,节点使用 node 来表示。

HTML DOM 树中的所有节点均可通过 JavaScript 进行访问,所有 HTML 元素(节点)均可被修改,也可以创建或删除。

节点概述:一般地,节点至少拥有nodeType(节点类型)、nodeName(节点名称)和nodeValue(节点值)这三个基本属性。

元素节点 nodeType 为 1

属性节点 nodeType 为 2

文本节点 nodeType 为 3 (文本节点包含文字、空格、换行等)在实际开发中,节点操作主要操作的是元素节点

利用 DOM 树可以把节点划分为不同的层级关系,常见的是父子兄层级关系

1. 父级节点 node.parentNode  

parentNode 属性可返回某节点的父节点,注意是最近的一个父节点

如果指定的节点没有父节点则返回 null

885c9ad48a374663b93926211b713fe8.png

 b7a2304b41524cce98054cb86826dca9.png

子节点 parentNode.childNodes(标准)

parentNode.childNodes 返回包含指定节点的子节点的集合,该集合为即时更新的集合。

注意:返回值里面包含了所有的子节点,包括元素节点,文本节点等。

如果只想要获得里面的元素节点,则需要专门处理。 所以我们一般不提倡使用childNodes

e72dc2d46f7440e59311e1de260eaf17.png

2be45dc344db4e9898584bd1242a0c38.png 

2.parentNode.children(非标准)

parentNode.children 是一个只读属性,返回所有的子元素节点。它只返回子元素节点,其余节点不返回 (重点掌握的)。

虽然children 是一个非标准,但是得到了各个浏览器的支持,因此我们可以放心使用

3. parentNode.firstChild

firstChild 返回第一个子节点,找不到则返回null。同样,也是包含所有的节点。

4. parentNode.lastChild  

lastChild 返回最后一个子节点,找不到则返回null。同样,也是包含所有的节点。

5. parentNode.firstElementChild 

firstElementChild 返回第一个子元素节点,找不到则返回null。

6. parentNode.lastElementChild    

lastElementChild 返回最后一个子元素节点,找不到则返回null。

85f53c639e564ff7825d9c7aab7a46ab.png

兄弟节点 

1. node.nextSibling 

nextSibling 返回当前元素的下一个兄弟元素节点,找不到则返回null。同样,也是包含所有的节点。

2. node.previousSibling 

previousSibling 返回当前元素上一个兄弟元素节点,找不到则返回null。同样,也是包含所有的节点。

3. node . nextElementSibl ing

nextElementsibl ing返回当前元素下一个兄弟元素节点,找不到则返回null。

4. node . previousElementSibling

previousElementsibling返回当元素上一个兄弟节点,找不到则返回null。

意:这两个方法有兼容性问题,IE9 以上才支持。

e5935d6573d54c3f8835ba1f859c27e6.png

创建节点

document.createElement() 方法创建由 tagName 指定的 HTML 元素。因为这些元素原先不存在,是根据我们的需求动态生成的,所以我们也称为动态创建元素节点。

添加节点

1. node . appendChild (child)

node . appendchild()方法将一个节点添加到指定父节点的子节点列表末尾。类似于css里面的

after

伪元素。

2. node. insertBefore (child, 指定元素)

node . insertBefore ()方法将一个节点添加到父节的指定子节点前面。类似于css面的before

伪元素。

e688c61e11d3412b8910a2624078ae13.png

简单版发布留言案例:

b013d4fe246442b284856752ae561c75.png

删除节点.

node . removeChi ld (child)

node . removeChild()方法从DOM中删除一个子节点, 返回删除的节点。

f4e042d3aaf94534b8cd2f568ef31778.png

复制节点(克隆节点)

node . cloneNode ()

node . cloneNode ()方法返回调用该方法的节点的一个副本。也称为克隆节点/拷贝节点

注意:

1.如果括号参数为空或者为false,则是浅拷贝,即只克隆复制节点本身,不克隆里面的子节点。

2.如果括号参数为true,则是深度拷贝,会复制节点本身以及里面所有的子节点。

26a26715b4144b5fa56ede184c40128e.png

三种创建元素方式区别:

b04b63440ae4470db09afd1fb6c85ba1.png

三种动态创建元素区别

document . write ()

element. innerHTML

document. createElement ()

区别

1. document. write是直接将内容写入页面的内容流,但是文档流执行完毕,则它会导致页面全部重绘

2. innerHTML 是将内容写入某个DOM点不会导致页面全部重绘

3. innerHTML 创建多元效率更高(不要拼接字符串,采取数组形式拼接), 结构稍微复杂

4. createElement() 创建多元素效率稍低一点,但是结构更清晰

总结:不同浏览器下,innerHTMI效率要比creatElement 高

总结:

关于dom操作,我们主要针对于元素的操作。主要有创建、增、删、改、查、属性操作、事件操作。

创建

1. document.write

2. innerHTML

3. createElement

1. appendChild

2. insertBefore

1. removeChild

主要修改dom的元素属性,dom元素的内容、属性,表弹的值等

1.修改元素属性: srC、 href. title等

2.修改普通元素内容: innerHTML 、innerText

3.修改表单元素: value、 type、 disabled等

4.修改元素样式: style、 className

主要获取查询dom的元素

1. DOM提供的API方法: getElementByld、 getElementsByTagName 老用法太推荐

2. H5提供的新方法: querySelector、 querySelectorAll 提倡

3.利用节点操作获取元素:父(parentNode). 子(children)、 兄(previousElementSibling.

nextElementSibling)提倡

属性操作

主要针对于自定义属性。

1. setAttribute:设置dom的属性值

2. getAttribute:得到dom的属性值

3. removeAttribute移除属性

事件操作:给元素注册事件, 采取 事件源.事件类型 = 事件处理程序


http://chatgpt.dhexx.cn/article/K9bn8cSu.shtml

相关文章

DOM 基础操作

文章目录 前言一、DOM 简介1.1 什么是 DOM 二、获取元素2.1 如何获取页面元素2.2 根据 ID 获取2.3 根据标签名获取2.4 通过 HTML5 新增的方法获取2.5 获取特殊元素&#xff08;body&#xff0c;html&#xff09; 三、事件基础3.1事件三要素3.2 执行事件的步骤3.3常见的鼠标事件…

[js]DOM操作

DOM也就是文档对象模型&#xff1a;document object model 主要用来动态操作HTML的元素节点&#xff0c;dom操作文档是居于DOM树为根据操作的。DOM树为html整体结构框架&#xff0c;其中有各种嵌套标签&#xff0c;最典型的就是以body为主容器&#xff0c;在body内部设置各种元…

DOM操作总结  (。♥ᴗ♥。) 哇!!

知识点 DOM 本质DOM 节点操作DOM 结构操作DOM 性能 前言 各种框架层出不穷&#xff0c;但DOM操作一直都会是前端工程师的基础&#xff0c;必备知识。 只会Vue和React等框架&#xff0c;而不懂DOM操作的前端程序员们。。。 DOM的本质&#xff1f; Do you know&#xff1f; 首…

JavaScript中DOM操作

Web前端基础修炼 HTML基本标签详解与运行截图 CSS基本操作详解及截图演示 JavaScript基础(ECMAScript) JavaScript中DOM操作 JavaScript中BOM操作 目录 DOM介绍 获取元素 操作元素 节点操作 DOM介绍 JavaScript一共包括三部分&#xff0c;分别是ECMAScript也就是Jav…

Dom操作的性能优化

在 开发过程中&#xff0c;或多或少都会遇到要操作dom的情况&#xff0c;而dom操作多多少少都会耗费一些性能&#xff0c;那今天我们就一起来看看在操作dom的时候有哪些性能优化方式吧&#xff1a; 1.选择性能更好的获取dom元素的方法 首先&#xff0c;我们一起来看看&#xf…

常见的DOM操作有哪些

这里是修真院前端小课堂&#xff0c;本篇分析的主题是 【常见的DOM操作有哪些】 这里是修真院前端小课堂&#xff0c;每篇分享文从 【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】 八个方面深度解析前端知识/技能&…

js中Dom操作

简单的Dom获取 什么是Dom操作&#xff1f; 1.DOM使一个"使程序"和"脚本"有能力的"动态地访问"和"更新文档内容结构"&#xff0c;以及"样式"的平台和语言中立的接口. 2.在HTML和JavaScript的学习中&#xff0c;DOM操作可谓时…

TypeScript Dom操作

文章目录 介绍获取元素类型断言获取多个DOM元素操作文本内容操作样式操作事件 介绍 DOM 是浏览器提供的&#xff08;浏览器特有)&#xff0c;专门用来操作网页内容的一些JS对象(API) 通过DOM操作&#xff0c;可以让Js/Ts控制页面&#xff08;(HTML)内容&#xff0c;让页面“动…

JavaScript DOM操作

文章目录 JavaScript DOM操作DOM操作元素DOM查询修改元素内容/属性获取元素节点 DOM的增删改 DOM操作CSS内联样式获得当前正在显示的样式 DOM的事件操作事件对象事件对象的属性 事件的冒泡和事件的委托事件冒泡事件委派事件的传播事件的绑定 JavaScript DOM操作 DOM操作元素 …

DOM的操作

一、DOM的操作 1、复制节点 cloneNode(deep) 参数deep是boolean类型&#xff0c;true/false true&#xff1a;表示深度复制&#xff08;将节点及其子节点都进行复制&#xff09; --- 深拷贝 false&#xff1a;表示浅复制&#xff08;只复制节点而不复制子节点&#xff09; ----…

DOM(操作)

DOM 1 作用和分类 作用&#xff1a;使用 JS 去操作 html 和浏览器 分类&#xff1a;DOM(文档对象模型)、BOM(浏览 器对象模型) DOM 是用来呈现以及与任意HTML 或 XML文档交互的API简单说&#xff1a;DOM 是浏览器提供的一套专门用来 操作网页内容 的功能DOM的作用&am…

13前端学习之WebAPI(三):节点操作、事件高级、DOM事件流、事件委托冒泡

文章目录 一、节点操作:1. 删除节点:1.2. 案例&#xff1a;删除留言 2. 赋值(克隆)节点:3. 案例:动态生成表格:3.1 案例分析:3.2 实现: 4. 创建元素的三种方式:4.1 区别:4.2 innerTHML和createElement效率对比: 5. DOM的核心总结:5.1 创建:5.2 增加:5.3 删除:5.4 改:5.5 查&…

DOM操作

今天开始进入JS的核心操作 DOM&#xff0c;DOM操作其实很简单&#xff0c;就是增删改查这几个操作&#xff0c;先看一下思维导图&#xff1a; 1.增加操作 1.新建&#xff1a; fn creatElement(标签名) 创建元素节点 fn setAttribute&#xff08;name,value&#xff09;直接设置…

JS中DOM元素的操作

一、DOM元素的获取 1&#xff09;document.getElementsByClassName ( “class”) 返回集 htmlcollection ,用法和数组一致 说明: class为DOM元素上class属性的值 2&#xff09;document.getElementById( “id” ) 功能:返回对拥有指定ID的第一个对象的引用 返回值: DOM对象 说明…

java锁结构之无锁偏向锁轻量级锁重量级锁

一、对象的本质&#xff08;锁在对象中的体现&#xff09; 1.1、对象的结构 对象由多部分构成的&#xff0c;对象头、属性字段、补齐字段等。补齐字段是指如果对象总大小不是4字节的整数倍&#xff0c;会填充上一段内存地址是之成为4的整数倍。 其中&#xff0c;对象头在对象…

简单理解重量级锁、轻量级锁、偏向锁

全文使用synchronized来说明。 synchronized给对象上锁&#xff0c;先上偏向锁&#xff0c;在上轻量级锁&#xff0c;最后上重量级锁。上什么锁&#xff0c;是jvm根据竞争程度自行变换的。 重量级锁 计算机操作系统本有Monitor对象&#xff0c;称为管程。在java里面看不到此对…

synchronized锁升级之偏向锁

目录 一、什么是偏向锁&#xff1f; 二、偏向锁原理 三、偏向锁演示 四、偏向锁的处理流程 五、偏向锁的撤销 六、偏向锁的好处 一、什么是偏向锁&#xff1f; HotSpot作者经过研究实践发现&#xff0c;在大多数情况下&#xff0c;锁不仅不存在多线程竞争&#xff0c;而…

Java无锁、偏向锁、轻量级锁、重量级锁,锁升级过程

2. 锁 2.1 无锁 Java对象刚创建时还没有任何线程来竞争&#xff0c;说明该对象处于无锁状态&#xff08;无线程竞争它&#xff09;&#xff0c;这时偏向锁标识位是0&#xff0c;锁状态是01 。 2.2 偏向锁 偏向锁是指一段同步代码一直被同一个线程所访问&#xff0c;那么该…

偏向锁的获取和撤销详解

Java SE 1.6 为了减少获得锁和释放锁带来的性能消耗&#xff0c;引入了偏向锁和轻量级锁&#xff1b;在Java SE 1.6 中&#xff0c;锁共有4种状态&#xff0c;级别从底到高依次是&#xff1a;无锁状态、偏向锁状态、轻量级锁和重量级锁状态&#xff0c;这几种状态会随着竞争情况…

一篇文章说清 :无锁、偏向锁、轻量级锁、重量级锁

文章目录 前言一、无锁二、偏向锁三、轻量级锁&#xff08;自选锁&#xff09;四、重量级锁锁升级场景 前言 JDK1.6为了减少获得锁和释放锁所带来的性能消耗&#xff0c;引入了“偏向锁”和“轻量级锁”&#xff0c;所以在JDK1.6里锁一共有四种状态&#xff0c;无锁状态&#x…