DOM(二):节点操作、事件高级

news2024/11/26 14:35:07

节点操作

    • 节点层级
    • 事件高级
    • 事件对象

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

  • 元素节点 nodeType为1
  • 属性节点 nodeType为2
  • 文本节点 nodeType为3 (文本节点包含文字、空格、换行等)

节点层级

1.父级节点

node.parentNode

  • parentNode属性可返回某节点的父节点,是最近的一个父节点
  • 如果指定的节点没有父节点则返回null

例如:

请添加图片描述
结果:

请添加图片描述

注意:换行是一个text节点

2.子节点

(1)parentNode.childNodes

parentNode.childNodes返回包含指定节点的子节点的集合
注意:返回值里面包含了所有的子节点,包括元素节点、文本节点等。

(2)parentNode.children

parentNode.children是一个只读属性,返回所有的子元素节点。它只返回子元素节点。

例如:

请添加图片描述

结果:

请添加图片描述

(3)parentNode.firstChild

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

(4)parentNode.lastChild

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

(5)parentNode.firstElementChild

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

(6)parentNode.lastElementChild

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

例如:

请添加图片描述

结果:

请添加图片描述

3.兄弟节点

(1)node.nextSibling

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

(2)node.previousSibling

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

(3)node.nextElementSibling

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

(4)node.previousElementSibling

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

例如:

请添加图片描述

结果:

请添加图片描述

4.创建节点

document.createElement(‘tagName’)

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

5.添加节点

(1)node.appendChild(child)

node.appendChild()方法将一个节点添加到指定父节点的子节点列表末尾。

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

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

例如:

请添加图片描述

结果:

请添加图片描述
6.删除节点

node.removeChild(child)

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

例如:

请添加图片描述

7.复制节点

node.cloneNode()

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

注意:

  • 如果括号参数为空或者是false,则是浅拷贝,只克隆复制节点本身,不克隆里面的子节点。
  • 如果括号参数为true,则是深度拷贝,会复制节点本身以及里面所有的子节点。

例如:

<ul>
    <li>123</li>
    <li>456</li>
    <li>789</li>
</ul>
<script>
var ul = document.querySelector('ul');
//cloneNode()括号为空或者里面是flase,则只复制标签,不复制里面的内容
var li1 = ul.children[0].cloneNode();
ul.appendChild(li1);
//cloneNode(true);括号里面为true,不仅赋值标签,也复制内容
var li2 = ul.children[1].cloneNode(true);
ul.appendChild(li2);
</script>

结果:
在这里插入图片描述

事件高级

1.注册事件

addEventListener 事件监听方式

eventTarget.addEventListener(type, listener, useCapture)

  • type:事件类型字符串,比如 click 、mouseover ,注意这里不要带 on
  • listener:事件处理函数,事件发生时,会调用该监听函数
  • useCapture:可选参数,是一个布尔值,默认是 false。

例如:
请添加图片描述

2.删除事件

传统的方式

eventTarget.onclick = null;

事件监听方式

(1) eventTarget.removeEventListener(type, listener, useCapture);

(2) eventTarget.detachEvent(eventNameWithOn, callback);

例如:

请添加图片描述

效果为点击一次之后再次点击不会再弹出警示框

3.DOM事件流
事件流描述的是从页面中接收事件的顺序。
事件发生时会在元素节点之间按照特定的顺序传播,这个传播过程即 DOM 事件流。

DOM 事件流分为3个阶段:

  • 捕获阶段
  • 当前目标阶段
  • 冒泡阶段
    请添加图片描述
    注意:
  • JS 代码中只能执行捕获或者冒泡其中的一个阶段。
  • onclick 和 attachEvent 只能得到冒泡阶段。
  • addEventListener(type, listener[, useCapture])第三个参数如果是
    true,表示在事件捕获阶段调用事件处理程序;如果是 false(不写默认就是false),表示在事件冒泡阶段调用事件处理程序。
  • 实际开发中我们很少使用事件捕获,我们更关注事件冒泡。
  • 有些事件是没有冒泡的,比如 onblur、onfocus、onmouseenter、onmouseleave
  • 事件冒泡有时候会带来麻烦,有时候又会帮助很巧妙的做某些事件。

例如:

<div class = "father">
 	<div class = "son">son盒子</div>
 </div>

请添加图片描述
请添加图片描述

事件对象

1.事件对象介绍

event 对象代表事件的状态,比如键盘按键的状态、鼠标的位置、鼠标按钮的状态。

eventTarget.onclick = function(event) {}
eventTarget.addEventListener(‘click’, function(event) {})
// 其中event 就是事件对象,我们还喜欢的写成 e 或者 evt

eventTarget.onclick = function(event) {
// 这个 event 就是事件对象,我们还喜欢的写成 e 或者 evt
}
eventTarget.addEventListener(‘click’, function(event) {
// 这个 event 就是事件对象,我们还喜欢的写成 e 或者 evt
})

注意:event 是个形参,系统帮我们设定为事件对象,不需要传递实参过去。

例如:
请添加图片描述

结果:

请添加图片描述

点击后可以看到事件的全部属性

请添加图片描述

2.事件对象的常见属性和方法

请添加图片描述

例如:

请添加图片描述
例二:

请添加图片描述
结果:

请添加图片描述

3.阻止事件冒泡

  • 标准写法

e.stopPropagation()

  • 非标准写法:IE 6-8 利用事件对象 cancelBubble 属性

e.cancelBubble = true;

例如:

请添加图片描述
在son上面添加的阻止冒泡,因此点击son时,只会弹出son的警示框;但是father并没有添加阻止冒泡,点击father后,弹出father之后依旧会弹出document的警示框

4.事件委托

  • 事件委托的原理

不是每个子节点单独设置事件监听器,而是事件监听器设置在其父节点上,然后利用冒泡原理影响设置每个子节点。

  • 事件委托的作用

我们只操作了一次 DOM ,提高了程序的性能。

请添加图片描述

请添加图片描述
效果分析:点击哪一个li,背景颜色就会变化。

原因:给父元素添加点击事件,就不用一个一个的添加子元素li的点击事件了。点击哪一个li,背景颜色就会变化。事件委托的核心是把事件交给父元素。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

字节前端必会vue面试题集锦

Vue3有了解过吗&#xff1f;能说说跟vue2的区别吗&#xff1f; 1. 哪些变化 从上图中&#xff0c;我们可以概览Vue3的新特性&#xff0c;如下&#xff1a; 速度更快体积减少更易维护更接近原生更易使用 1.1 速度更快 vue3相比vue2 重写了虚拟Dom实现编译模板的优化更高效的…

3、数据库中的约束数据库设计

约束 * 概念&#xff1a; 对表中的数据进行限定&#xff0c;保证数据的正确性、有效性和完整性。 * 分类&#xff1a; 1. 主键约束&#xff1a;primary key 2. 非空约束&#xff1a;not null 3. 唯一约束&#xff1a;unique 4. 外键约束&#xff1a;forei…

3.0里程碑:Topomel Box 现已在微软商店可用

猿友好&#xff01; 今天是个大喜的日子 我的程序 Topomel Box 的第三个版本(3.0)正式上架微软商店。通过微软商店这个统一的分发渠道&#xff0c;Topomel Box 有望与更多国家的用户见面并提供服务。 安装方法很简单&#xff0c;只需要打开微软商店&#xff08;Microsoft Sto…

⚡️【数据结构】二叉树的概念和相关知识总结

&#x1f332;目录 1.树概念及结构 1.1树的概念 1.2 树的相关概念 1.3 树的表示 1.4 树在实际中的运用&#xff08;表示文件系统的目录树结构&#xff09; 2.二叉树概念及结构 2.1概念 2.2满二叉树 2.3完全二叉树 2.4满二叉树和完全二叉树的区别 2.5二叉树的性质 2.6…

linux日志管理总结,rules详解、轮转详解、实例展示。

概述 ​ 1、日志文件记录系统事件&#xff0c;包括用户的登录信息、系统的启动信息、系统的安全信息、邮件相关信息、各种服务相关信息等 ​ 2、通过日志来检查错误发生的原因&#xff0c;或者受到攻击时攻击者留下的痕迹。 1. rsyslog系统日志管理 1.1 处理日志的程序&#…

工控安全-Modbus重放攻击

文章目录Modbus-重放攻击Modbus-仿真环境(ModSim)Modbus-协议采集(ModbusScan)抓取Modbus/TCP流量使用青云工具进行重放攻击Modbus-重放攻击 Modbus-仿真环境(ModSim) 首先开启Modbus仿真环境 ip地址是10.10.100.11 ModSim32&#xff0c;这个软件是模拟Modbus协议的一个仿真…

git push错误->Error: src refspec master does not match any

参考文章问题描述&#xff1a;在执行命令 git push origin master 时报错->Error: src refspec master does not match any问题分析&#xff1a;在网上查找解决方法&#xff0c;大部分人说是暂存区没有文件&#xff0c;未执行git add 导致出错。但是此时已经执行了git add 操…

将石油和天然气推向边缘

无论是来自在线购物交易还是工业环境中的物联网&#xff08;IoT&#xff09;设备&#xff0c;数据都是不断收集的。幸运的是&#xff0c;世界各地的每一个行业都可以利用这一趋势&#xff0c;许多行业都已经这样做了。在石油和天然气行业&#xff0c;持续的数据通信是现在保持完…

JavaScript刷LeetCode-字符串类解题技巧

序章 我们把字符串、数组、正则、排序、递归归为简单算法。接下来系列里&#xff0c;将系列文章里将为大家逐一介绍。 字符串 翻转字符串中的单词 给定一个字符串&#xff0c;你需要反转字符串中每个单词的字符顺序&#xff0c;同时仍保留空格和单词的初始顺序。示例 1: 输…

数据库和SQL介绍

数据库管理系统&#xff08;数据库软件)那么如何实现这种数据库形式的数据管理呢?我们需要借助:数据库管理系统&#xff0c;也就是常说的数据库软件。数据库软件是非常多的&#xff0c;常见的有:这些软件都能实现︰管理库﹑管理表、基于表来管理数据数据库和SQL的关系数据库是…

Java 诊断利器 Arthas 快速入门

Arthas 是一款线上监控诊断产品&#xff0c;通过全局视角实时查看应用 load、内存、gc、线程的状态信息&#xff0c;并能在不修改应用代码的情况下&#xff0c;对业务问题进行诊断&#xff0c;包括查看方法调用的出入参、异常&#xff0c;监测方法执行耗时&#xff0c;类加载信…

ORB-SLAM2 --- LocalMapping::KeyFrameCulling函数

目录 1.函数作用 2.code 3.函数解析 1.函数作用 检测当前关键帧在共视图中的关键帧&#xff0c;根据地图点在共视图中的冗余程度剔除该共视关键帧。 冗余关键帧的判定&#xff1a;90%以上的地图点能被其他关键帧&#xff08;至少3个&#xff09;观测到。 2.code /*** brie…

第七次作业部分

文章目录1、获取根分区剩余大小2、获取当前机器ip地址3、统计出apache的access.log中访问量最多的5个IP4、打印/etc/passwd中UID大于500的用户名和uid5、/etc/passwd 中匹配包含root或net或ucp的任意行6、处理以下文件内容,将域名取出并根据域名进行计数排序处理(百度搜狐面试题…

透过现象看本质,我找到了Netty粘包与半包的这几种解决方案。

1、粘包与半包 啥也不说了&#xff0c;直接上代码是不是有点不太友好&#xff0c;我所谓了&#xff0c;都快过年了&#xff0c;还要啥自行车 我上来就是一段代码猛如虎 1.1 服务器代码 public class StudyServer {static final Logger log LoggerFactory.getLogger(StudyS…

ORB-SLAM2 --- ORBmatcher::Fuse函数 --- 局部建图线程调用重载版

目录 1.函数作用 2.code 3.函数解析 1.函数作用 将参数一的关键帧的地图点与参数二的地图点集合进行融合。 将地图点投影到关键帧中进行匹配和融合&#xff1b;融合策略如下&#xff1a; 1.如果地图点能匹配关键帧的特征点&#xff0c;并且该点有对应的地图点&…

六、k8s Pod控制器详解

1 Pod控制器介绍 Pod是kubernetes的最小管理单元&#xff0c;在kubernetes中&#xff0c;按照pod的创建方式可以将其分为两类&#xff1a; 自主式pod&#xff1a;kubernetes直接创建出来的Pod&#xff0c;这种pod删除后就没有了&#xff0c;也不会重建控制器创建的pod&#x…

异常处理部分

文章目录一、异常概述及体系结构分类ErrorException异常的体系结构异常处理&#xff1a;抓抛模型异常处理机制一&#xff1a;try-catch-finallyfinally的使用异常处理机制一&#xff1a;throws异常类型如何选择两种方式手动生成异常对象如何定义自定义的异常类一、异常概述及体…

JVM学习- - -虚拟机栈详解

前言&#xff1a;今天学长带领大家走进JVM学习&#xff0c;让我们一起来学习认识虚拟机栈吧~ 目录 1 虚拟机栈概述 虚拟机栈出现的背景 初步印象 内存中的栈和堆 虚拟机栈基本内容 栈的优点 2 栈的存储单位 栈中存储什么&#xff1f; 栈运行原理 栈帧的内部结构 3 局…

【云原生】k8s之存储卷

内容预知 前言 1.emptyDir存储卷 2.hostPath存储卷 3.nfs共享存储卷 4. PVC 和 PV的静态存储卷 4.1 pv和pvc的介绍 4.2 pvc 和pv的创建过程及销毁过程 4.3 对pv的操作指导 4.4 静态创建pv和pvc资源由pod运用过程 步骤一&#xff1a;在NFS主机上创建共享目录&#xff0c;…

采用rknn-toolkit导出rknn模型并部署在rock3a-rk3568芯片 上全流程

因工作需要&#xff0c;需要将目标检测模型 部署在开发板上。在走了很多弯路后 找到一个成功的案例并记载下来 这里说一下我现有的硬件设备 。 我是购买的RADXA的rock3a开发板 搭载的soc是rk3568 这是开发板的正面图&#xff0c;因为瑞芯微针对计算机视觉中的目标检测模型有一…