首页 > 其他分享 >节点、事件详解

节点、事件详解

时间:2024-11-10 14:46:58浏览次数:3  
标签:触发 元素 节点 详解 冒泡 event 事件

节点操作

创建节点

docment.createElement('节点')

参数:标签名字符串

这些元素原先不存在,是根据需求动态生成的,所以也成为动态创建元素节点,会将创建好的对象作为返回值返回

创建文本

document.createTextNode('文本')

参数:文本内容字符串,并将新的节点返回

添加节点

1、father.appendChild(child) 追加元素 类似数组中的push()

将一个节点添加到指定父节点的子节点列表的末尾。类似css里面的after伪元素

2、father.insertBefore(child,指定元素)

将一个节点添加到父节点的指定子节点前面。类似css里面的before伪元素

替换节点

replaceChild()

可以使用指定的子节点替换已有的子节点

语法:父节点.replaceChild(新节点,旧节点)

删除节点

写法一、father.removeChild(child)

写法二、child.parentNode.removeChild(child)

可以在DOM中删除一个子节点,返回删除的节点

克隆节点

node.cloneNode() 返回调用该方法的节点的一个副本

参数:布尔值,默认是false

false 只克隆节点本身,不克隆里面的子节点

true 拷贝节点,拷贝内容

创建节点另外几种方式

(1)、element.innerHTML

允许更改html元素的内容,可以设置或返回表格行的开始和结束标签之间的HTML,可以解析html标签

(2)、 element.innerText

获取或设置元素的文本----以纯文本的方式直接显示,不可以解析html标签

(3)、document.write()

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

(4)、insertAdjacentHTML() /əˈdʒeɪsnt/

insertAdjacentHTML() 是Element的API中的一个方法,可以将字符串文本转化为你想要的节点(Node),并且插入到你想要插入的位置中。而且它并不会向innerHTML一样会替换掉已有的节点,而是会插入到指定位置。

语法:element.insertAdjacentHTML(position,text)

参数1: position

顾名思义,就是想要插入的位置,一共有4个固定的值

'beforebegin':元素element自己的前面。

'afterbegin':插入到元素element里面的第一个子节点之前(也就是总是会插入到最前面,例如我插入5个节点,顺序是1、2、3、4、5,那么我就需要以5、4、3、2、1的顺序插入,有一种栈结构先进后出的感觉)。

'beforeend':插入元素element里面的最后一个子节点之后(这个比较容易理解,就是插入到最后一个节点后,例如我插入5个节点,顺序是1、2、3、4、5,那就正常的1、2、3、4、5就好啦,但是注意是在已有节点的后面哦)。

○'afterend':元素element自己的后面。

 

image.png

参数2:text文本

可以结合``字符串使用

事件操作

注册事件方式

解绑事件(删除事件)

DOM事件流

事件流概述

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

例如:给idiv绑定一个事件,时间流顺序如下

 

image.png

事件流3个阶段

(1)、捕获阶段:从触发事件的目标元素开始,事件被从目标元素的所有祖先元素依次往下传递(从外向内)

 

image.png

(2)、当前目标阶段:触发自己的事件

(3)、冒泡阶段:当一个元素的事件被触发时,同样的事件将会在该元素的所有祖先元素中依次被触发(从内向外)

 

image.png

事件流指定阶段

js代码中只能执行捕获或者冒泡其中的一个阶段,其中onclick和attachEvent只能得到冒泡阶段,我们可以通过addEventListener(type,listener[,useCapture])中的第三个参数来分别演示冒泡和捕获

useCapture:可选,是否在捕获阶段触发事件,需要一个布尔值,默认是false,在冒泡阶段处理程序,如果是true,就是在捕获阶段处理程序

注意:

实际开发中我们很少使用事件捕获,我们更关注事件冒泡

有些事件是没有冒泡的,比如onblur、onfoucs、onmuseenter、onmouseleave

事件冒泡有时我们需要,有时需要避免

事件对象

概念

简单理解:事件发生后,跟事件相关的一系列信息数据的集合都放到这个对象里面,这个对象就是事件对象,它有很多的属性和方法

注意:

event 就是一个事件对象,写在我们侦听函数的小括号里面,当形参来看,这个形参,我们可以自己命名,例如event、evt、e等

事件对象是当事件触发了,系统自动给我们创建的,不需要我们去传入实参

事件对象在ie低版本中有兼容性问题,其兼容性的写法:event = event || window.event;,一般不用考虑

事件对象属性

e.target:返回触发事件的对象

e.type:返回事件的类型,比如:click、mouseover,不带on

e.cancelBubble:阻止冒泡 ie6-8使用(了解)

e.returnValue:阻止默认行为, ie6-8使用(了解)

e.preventDefault():阻止默认行为 非 ie6-8使用

e.stopPropagation():阻止冒泡 非 ie6-8使用

e.offsetX、e.offsetY:获取鼠标相对于当前元素的位置

e.clientX、e.clientY:获取鼠标相对于浏览器可见窗口的坐标

e.pageX、e.pageY:获取鼠标相对于文档页面的坐标

e.screenX,e.screenY:返回鼠标相对于电脑屏幕的x坐标

事件委托(代理、委派)

不给每个子节点单独设置事件监听,而是将事件统一绑定给元素的共同的祖先元素,然后利用冒泡原理影响设置每个子节点

通过事件委派可以减少事件绑定的次数,提高程序的性能

<body>

<!-- 需求:为每个超链接都绑定单击响应函数 -->

<button id="btn01">增加链接</button>

<ul id="u1">

<li><a href="#" class="link">链接一</a></li>

<li><a href="#" class="link">链接二</a></li>

<li><a href="#" class="link">链接三</a></li>

</ul>

<script>

//点击按钮,新建超链接

var btn01 = document.getElementById("btn01");

var u1 = document.querySelector("#u1");

btn01.onclick = function () {

//新建一个li

var li = document.createElement("li");

li.innerHTML = '<a href="#" class="link">新建超链接</a>';

u1.appendChild(li);

};

//为ul绑定单击响应函数

u1.onclick = function (event) {

console.log(event.target);

if (event.target.className == "link") {

alert("hi");

}

};

</script>

</body>

常用的键盘事件

  1. 键盘事件
  1. 触发条件
  1. onkeyup
  1. 某个键盘按键被松开时触发
  1. onkeydown
  1. 某个键盘按键被按下时触发
  1. onkeypress
  1. 某个键盘按键被按下时触发

e.keyCode 返回该键的ASCII值 键盘上每个字符有对应的数字

<body>

<input type="text" />

<script>

document.onkeydown = function (e) {

console.log(e.keyCode);

};

//需求: 使文本框不能输入数字

var int = document.querySelector("input");

int.onkeydown = function (e) {

if (e.keyCode >= 48 && e.keyCode <= 57) {

/* 在文本框输入内容,属于keyCode的默认行为

return false则会取消默认行为 */

return false;

}

};

</script>

</body>

标签:触发,元素,节点,详解,冒泡,event,事件
From: https://blog.csdn.net/S_3440183297_/article/details/143641880

相关文章

  • 「ComfyUI」增强图像细节只需要一个节点,SD1.5、SDXL、FLUX.1 全支持,简单好用!
    ‍‍‍‍‍前言今天给小伙伴们介绍一个非常简单,但又相当好使的一个插件。功能很简单,就是增加或者减少图像的细节,节点也很简单,就一个节点,只需要嵌入我们的ComfyUI的基础工作流中就可以了,随插随用。而且该插件不仅支持SD1.5和SDXL,甚至最新出的FLUX.1模型也是支持的......
  • 电脑提示xinput1_3.dll丢失怎么办?游戏DLL修复方法详解
    xinput1_3.dll是一个动态链接库(DLL)文件,它在Windows操作系统中扮演着重要的角色,特别是在处理游戏控制器和其他输入设备的交互方面。这个文件是MicrosoftDirectX软件包的一部分,DirectX是微软公司开发的一个多媒体编程接口集,广泛应用于PC游戏开发中,以实现高效的图形渲染、音频处......
  • 鸿蒙之List组件详解
    前言:List组件的基本用法,可以用它来展示列表,并且实现列表滚动,日常开发的时候还可以用它来实现更为复杂的效果列表是一种复杂的容器,当列表项达到一定数量,超过List容器组件大小时,可以自动提供滚动功能。它适合用于呈现同类数据类型或数据类型集,例如图片和文本。在列表中显示......
  • 【造轮子】qiankun详解和手写
    说到微前端,现在最火的方案就是qiankun。qiankun的特点是易用性和完备性很高。说白了就是能很方便、快速的接入,同时bug少,功能强大。介绍微前端已经火了一段时间了,就不介绍了,直接贴图得了。话不多少,本次主要做两件事情:拆解和解析qiankun源码尝试qiankun造轮子分析qi......
  • 代码随想录算法训练营第19天|235. 二叉搜索树的最近公共祖先 ,701.二叉搜索树中的插入
    235.二叉搜索树的最近公共祖先文章链接:https://programmercarl.com/0235.二叉搜索树的最近公共祖先.html题目链接:https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-search-tree/思路:利用二叉搜索树的特性,当第一次遇到在[p,q]区间或[q,p]区间的元素的节点,则......
  • DICOM图像知识:深入详解DICOM的层级关系
    引言        数字成像和通信医学(DICOM,DigitalImagingandCommunicationsinMedicine)标准是全球广泛采用的医学影像存储和交换标准。DICOM不仅定义了影像数据的文件格式,还规定了影像数据在不同系统之间传输的协议。其层级结构是DICOM标准的核心组成部分,旨在有效组织......
  • 布隆过滤器--详解
    抛砖引玉假设遇到这样一个问题:一个网站有20亿url存在一个黑名单中,这个黑名单要怎么存?若此时随便输入一个url,你如何快速判断该url是否在这个黑名单中?并且需在给定内存空间(比如:500M)内快速判断出。方案一可能很多人首先想到的会是使用HashSet,因为HashSet基于Ha......
  • 【金融风控】相关业务介绍及代码详解
    金融风控相关业务介绍【了解】项目整体介绍1.风控业务和风控报表</span>零售金融产品相关的指标风控建模流程​#2.特征工程特征构造特征筛选​3.评分卡模型构建逻辑回归集成学习XGBoostLightGBM模型评估​#4.样本不均衡问题/异常点检测【了解】今日内容介......
  • 事件循环(Event loop)
    一、什么叫事件循环事件循环也就是Eventloop,是JavaScript或Node为解决单线程代码执行不阻塞主进程一种机制,也就是我们所说的异步原理。事件循环负责执行代码、收集和处理事件以及执行队列中的子任务。二、什么是进程与线程?进程是计算机中正在运行的程序的一个实例;每个进程......
  • 科普文:软件架构数据库系列之【MySQL:innodb刷脏页之Checkpoint机制详解】
    概叙科普文:软件架构数据库系列之【MySQL/innodb刷脏页】-CSDN博客科普文:软件架构数据库系列之【innodb内存管理四剑客:LRU算法+Free_list、LRU_list、FlushList】-CSDN博客科普文:软件架构数据库系列之【MySQL:innodb刷脏页多线程的源码解读】-CSDN博客CheckPoint是MySQL的WA......