原生 JS DOM 常用操作大全
DOM
DOM文档对象模型 又称为DOM树 DOM树 由文档、元素、节点 组成文档:一个页面就是一个文档,元素:文档中的所有标签都称为元素。DOM中使用Element表示节点:文档中的所有内容,在文档中都是节点(标签、属性、文本注释等)DOM中使用node表示
获取元素
都以 document . 开头 例如:document.getElementById
使用 console.dir 可以打印出返回的元素对象,从而更好的查看属性和方法
getElementById (元素ID)
获取标签为Id的元素 (文档中的id值是唯一的,没有重复的id)参数:id值,区分大小写的字符串返回id属性值的元素节点相对应的对象
getElementsByTagName (标签名)
注意:得到的是一个对象数组 ,如需操作元素则需要遍历伪数组 并且伪数组不能使用数组的方法以标签名来获取元素参数:标签名返回的是一个对象数组 (伪数组)
注意:getElementsByTagName()获取到是动态集合,即:当页面增加了标签,这个集合中也就增加了元素。
getElementsByCalssName (class类名)
以class类名获取元素参数 calss类名返回 对应类名的元素对象集合
querySelector (选择器 )
可以是任意的选择器 例如:id、标签名、类名参数: 可以是 id 、类名、标签 选择器返回:该模式匹配的第一个元素注意 : 需要在选择器前加符号 例如 .box 、 #nav。让querySelector 知道是什么选择器所以要加符号。 与前面介绍的不同
querySelectorAll (选择器)
可以是任意的选择器 例如:id、标签名、类名参数: 可以是 id 、类名、标签 选择器返回:该模式匹配的所有元素对象集合(伪数组 )
获取特殊元素(body、html)
获取body :document.body获取html : document.documentElement
获取元素之 节点获取
页面中所有的内容都为节点,节点使用 node 来表示
DOM 树可以把节点划分为不同的层级关系,常见的是父子兄层级关系
父级节点
node.parentNode //node表示节点parentNode //可以返回某个节点的父节点,注意是最近一级的父节点如果指定的节点没有父节点则返回null
子元素节点
parentNode.children (各个浏览器都支持) (不包含 元素节点,文本节点等)parentNode.firstElementChild (获取第一个元素节点) 具有兼容问题 ie9才支持parentNode.lastElementChild (获取最后一个子元素节点) 具有兼容问题 ie9才支持parentNode.children[0] (没有兼容性问题,并且返回第一个子元素)
- 我是li
- 我是li
- 我是li
- 我是li
兄弟节点
node.nexElementSibling //返回当前元素下一个兄弟元素节点,找不到则返回nullnode.previousElementSibling // 返回当前元素上一个兄弟节点,找不到则返回null两种方法都有兼容性的问题,IE9以上支持
问:解决兼容性问题
答:自己封装一个兼容性的函数
function getNextElementSibling(element) {
var el = element;
while (el = el.nextSibling) {
if (el.nodeType === 1) {
return el;
}
}
return null;
}
事件处理
javaScript 程序中采用的是异步处理事件模型,事件处理分三部分。
事件源 (具体作用在哪 个元素或标签上)事件类型 (指的是 例如:鼠标的点击,双击,经过,键盘的按下的键)处理程序 ( 指的是 事件触发后浏览器调用对应的处理程序(以函数的形式),也称为事件处理函数)
注册事件
注册事件有三种方法
使用HTML标签属性注册(例如 Vue的事件注册)使用传统的DOM对象注册 (onclick) 具有唯一性注意:使用这种方式注册 一个事件源只能注册一个,如注册多个,后面的覆盖前面的注册事件使用 addEventListener(type,listener,useCapture)的方法监听注册方式 (即可添加多个,也可以取消事件)type :事件类型 , 例如:click、mouseover 注意这是里不需要带onlistener:事件处理函数,事件发生时,会调用该监听函数useCapture:可选参数,是一个布尔值,默认是false 。(false为捕获阶段,true为冒泡阶段)注意:addEventListener() 方法 不支持低版本的IE
删除事件(解绑事件)
移除传统的注册方式(DOM 对象的方法)
div.onclick=null;
移除监听事件的方式 (使用匿名函数 ,无法移除 )
div.removeEventListener (type,listener,useCapture);
鼠标事件
鼠标事件的执行顺序
mousedown->mouseup->click->mousedown->mouseup->click->dbclickclick 鼠标点击左键并释放时触发dbclick 双击鼠标左键时触发mousedown 按下鼠标按键时触发mouseup 释放鼠标按键时触发mouseover 当鼠标经过时触发 具有事件冒泡 mouseout 当鼠标离开时触发 具有事件冒泡 mouseenter 当鼠标经过时触发 不具有事件冒泡 mouseleave 当鼠标经过时触发 不具有事件冒泡 mousemove 当移动鼠标时触发contextmenu 禁止鼠标右键菜单selectstart 禁止鼠标选中文字只有在同一个元素上相继触发 mouseover 和 mouseup事件 才会触发 click 事件
只有触发再两次 click 事件,才会触发一次 dbclick 事件mouseenter与mouseove的区别mouseenter经常与mouseleave搭配使用
//1.mouseenter 鼠标经过 不具有事件冒泡,不会传递给son点击事件
禁止鼠标右键菜单
//1.contextmenu 禁止鼠标右键菜单
documnet.addEventListener(“contextmenu”,function(e){
e.preventDefault(); // 阻止事件的默认跳转行为
})
禁止鼠标选中文字
//2.selectstart 禁止鼠标选中文字
documnet.addEventListener(“selectstart”,function(e){
e.preventDefault(); //阻止事件的默认跳转行为
})
焦点事件blur 元素失去焦点时触发 不会冒泡 focus 元素获得焦点时触发 不会冒泡
键盘事件
一般键盘事件使用在 输入框的标签中当按下字符键的执行顺序 (按下字符键 触发三次事件)keydown > keypress > keyup 其中 keydown 和 keypress 在文件框发生变化之前触发,然后是keyup事件则是在文件框发生变化之后触发当按下非字符键的执行顺序 (按下非字符, 触发二次事件)keydown > keyup 其中首先触发 keydown , 最后触发 keyup.注意:keydown 和 keypress 在文本框里面特点:先执行事件的处理程序 在将文字落入到文本框中, keyup 在文本框里面的特点:先将文字落入到文本框中在执行事件的处理程序keydown 按下键盘上的任意键触发;按住不放,重复触发keypress按下键盘上的字符键触发;按住不放,重复触发,不识别功能键,如 箭头,ctrl,shift 等keyup释放键盘上的键时触发e.keyCode当用户按下按键时获取按键 ASCII 编码e.key获取当用户按下按键时的名称
滚动条事件
当出现滚动条时,向下滚动页面时,上面被隐藏掉的高度,被称为页面被卷去的部分,此时滚动条在滚动时会触发 scroll事件
element.addEventListener(“scroll”,()=>{ console.log(element.scrollTop) })
表单事件
change事件 当表单的值 发生改变时触发
事件对象
在触发DOM上的某个事件时会产生一个事件对象event ,这个对象中包含着所有与事件有关的信息。包括导致事件的元素、事件的类型以及其他与特定事件相关的信息。事件触发时系统会产生一个事件对象,并且系统会以实参的形式传给事件处理函数在事件处理程序中声明一个形参用来接收事件参数。
//1. 方法一
eventTarget.onclick = function (event) {
//这个event就是事件对象,我们还喜欢的写成 e 或者 evt
}
// 2. 方法二
eventTarget.addEventListener(“click”, function (event) {
//这个event就是事件对象,我们还喜欢的写成 e 或者 evt/这个
})
//3.方法三
eventTarget.addEventListener(“click”, fn)
function (event) {
//这个event就是事件对象,我们喜欢写成e或者evt
}
事件对象的属性和方法
e.target返回 触发 事件的对象 标准e.srcElement 返回触发事件的对象 非标准 ie6-8e.type返回事件的类型 比如 click mouseover 不带 one.canceIBubble该属性阻止冒泡 非标准 ie6-8使用e.returnValue 该属性 阻止默认事件(默认行为)非标准 ie6-8使用 比如不让链接跳转e.preventDefault() 该方法阻止默认事件(默认行为)标准 比如不让链接跳转e.stopPropagation() 标准的阻止事件冒泡
事件对象的 this 与 e.target 的区别
this 指向的是事件绑定的元素e.target 指向的是事件触发元素 别忘了e.通常情况下e.target 和 this 的指向是一致的
注意:有一种情况不同,那就是在事件冒泡时(父子元素有相同事件,单击子元素,父元素的事件处理函数也会被触发执行)这时候 this 指向的是元素,因为 this 使终指向的是事件绑定的元素 target 指向的是子元素 ,因为target使终指向的是事件触发的元素
- abc
- abc
- abc
鼠标的事件对象
e.clientX 返回鼠标相对于浏览器窗口可视区的 X 坐标e.clientY 返回鼠标相对于浏览器窗口可视区的 Y 坐标e.pageX 返回鼠标相对于文档页面的 X 坐标 IE9+ 支持e.pageY 返回鼠标相对于文档页面的 Y 坐标 IE9+ 支持e.screenX 返回鼠标相对于电脑屏幕的 X 坐标e.screenY 返回鼠标相对于电脑屏幕的Y 坐标
操作元素
修改元素内容Element.innerText只显示纯文本,去除html标签,同时去除了空格和换行Element.innerHTML显示指定的元素的全部内容,包括HTML标签,同时保留空格和换行 innerText 与 innerHTML的区别使用 innerText 获取内容 不识别 HTML 标签, 空格与换行使用 innerText 设置内容 不识别 HTML 标签使用 innerHTML 获取内容 识别 全部内容包括 HTML 标签 ,会保留空格和换行使用 innerHTML 设置内容 识别 可设置 HTML 标签
属性的操作
this 指向的是事件函数的调用者
普通元素的属性操作innerText 、innerHTMLsrc 、hrefid 、alt 、title
表单元素的属性操作type 、value 、checked 、selected 、disabled获取属性的值元素对象.属性名
设置属性的值元素对象.属性名=值
按钮
样式属性操作
通过 js 修改元素大小,颜色,位置等模式
Element.style.样式 = 值 //行内样式操作 修改行内样式 权重较高 Element.className = "类名" //类名样式操作 覆盖原先的类名Element.className=" " //值为空或null 可使元素的类名置空
Element.classList.add ("类名") // 添加类名操作 可添加多个 不会覆盖原有的类名Element.classList.remove("移除类名") // 移除类名操作 可移除多个类名Element.classList.toggle("切换类名") //切换类名 无则添加,有则移除Element.calssList.contains("类名") //是否包含此类名, 返回布尔值判断是否为存在
calssName 是保留字,因此使用 calssName 来操作元素类名属性
取消 a 标签的默认跳转
方法一: 在处理程序内的最后 添加 return false ;方法二: 在 a标签中加 javascript:;
自定义属性操作
为什么需要自定义属性:用于在页面中存储数据而不用在数据库中存储
Element.属性 (内置属性通 点的方式 获取元素属性)Element.getAttribute("属性") (一般用于 自定义属性)兼容性获取
设置属性值
Element.属性= "值" (内置属性)Element.setAttribute( "属性","值" ); //一般用于自定义属性
移除属性值
Element.removeAttribute("属性")
只能获取以 data开头 的自定义属性
Element.dataset.index 或者 Element.dataset["index"] ie11才支持使用 Element.dataset.属性 获得的是一个以 data- 开头的自定义属性集合
设置H5 自定义属性
H5中规定 自定义属性要 以 data-开头做为属性名并且赋值。
在标签中设置<div data-index="1"> </div>使用 js设置 Element.setAttribute("data-index",2)
节点操作
node 表示父级 child 表示子级
创建节点
document.createElement("标签")
动态创建元素 创建之后需要添加
添加节点
node.appendchild(child ) //node表示父级 child表示子级
将节点添加到node表示的父节点的子节点列表的末尾,类似数组的方法pushnode.insertBefore( child,指定节点的位置 )
将节点添加到node表示的父节点的指定子节点的前面,类似于css里面的before伪元素
删除节点
node.removeChild( child ) 方法 在父级节点删除一个子节点,返回删除的节点
复制(克隆)节点
node.cloneNode() //返回调用 该方法的节点的一个副本,也称为克隆节点/拷贝节点如果括号参数为空或者为 false,则是浅拷贝,即只克隆复制节点本身,不克隆里面的子节点如果括号参数为true,则是深度拷贝,会复制节点本身以及里面所有的子节点
DOM的核心总结
DOM操作,我们主要针对于元素的操作。主要有创建,添加,删除,改,查。
创建元素的三种方式
document.write()Element.innerHTML= 值document.createElement()innerHTML数组方式(效率高)
添加
appendChild //在父节点的末尾添加节点insertBefore //可以指定子节点的添加位置
删除
removeChild
改
主要修改DOM元素的属性,DOM元素的内容,属性,表单的值等。修改元素属性: src、href、title等修改元素的普通内容: innerHMTL、innerText修改表单元素:value、type、disabled等修改元素的模式,style、className
查
DOM提供的API:getElementById,getElementByTagName 古老用法不太推荐使用H5提供的新方法:querySelector,querySelectorAll 提倡利用节点操作获取元素:父(parentNode)、子(children)、兄弟(previousElementSibling、nextElementSibling) 提倡
操作自定义属性
setAttribute: 设置自定义属性getAttribute:获取自定义属性removeAttribute:移除属性
相关文章:
原生 JS DOM 常用操作大全
DOM DOM文档对象模型 又称为DOM树 DOM树 由文档、元素、节点 组成文档:一个页面就是一个文档,元素:文档中的所有标签都称为元素。DOM中使用Element表示节点:文档中的所有内容,在文档中都是节点(标签、属性…...

昇腾CANN 7.0 黑科技:DVPP硬件加速训练数据预处理,友好解决Host CPU预处理瓶颈
在NPU/GPU上进行模型训练计算,为了充分使用计算资源,一般采用批量数据处理方式,因此一般情况下为提升整体吞吐率,batch值会设置的比较大,常见的batch数为256/512,这样一来,对数据预处理处理速度…...

Aria2 任意文件写入漏洞复现
漏洞描述 Aria2 是一款轻量级、多协议、多源下载工具(支持 HTTP/HTTPS、FTP、BitTorrent、Metalink),内置 XML-RPC 和 JSON-RPC 接口。 我们可以使用 RPC 接口来操作 aria2 并将文件下载到任意目录,从而造成任意文件写入漏洞。 …...

思维模型 多看效应
本系列文章 主要是 分享 思维模型,涉及各个领域,重在提升认知。越熟悉,越喜欢。 1 多看效应的应用 1.1 多看效应在广告和营销领域的应用 1 可口可乐之歌 可口可乐公司在 20 世纪 60 年代推出了“可口可乐之歌”广告,这个广告通…...

持续集成交付CICD:Jenkins Pipeline与远程构建触发器
目录 一、实验 1.Jenkins Pipeline本地构建触发器 2.Jenkins Pipeline与远程构建触发器(第一种方式) 3.Jenkins Pipeline与远程构建触发器(第二种方式) 4.Jenkins Pipeline与远程构建触发器(第三种方式࿰…...

【无标题(PC+WAP)花卉租赁盆栽绿植类pbootcms站模板
(PCWAP)花卉租赁盆栽绿植类pbootcms网站模板 PbootCMS内核开发的网站模板,该模板适用于盆栽绿植网站等企业,当然其他行业也可以做,只需要把文字图片换成其他行业的即可; PCWAP,同一个后台,数据即时同步&…...
pytorch 学习率衰减策略
##学习率衰减策略 import torch.nn.functional as F import torch import torch.nn as nn import matplotlib.pyplot as plt#初始化模型 class Net(nn.Module):def __init__(self):super(Net, self).__init__()self.conv1 = nn.Conv2d(1, 10, kernel_size=5)self.conv2 = nn.Co…...

Flink SQL -- 概述
1、Flink SQL中的动态表和连续查询 1、动态表: 因为Flink是可以做实时的,数据是在不断的变化的,所以动态表指的是Flink中一张实时变换的表,表中会不断的有新的数据。但是这张表并不是真正的物理表。 2、连续查询: 连续…...

Spring RabbitMQ那些事(1-交换机配置消息发送订阅实操)
目录 一、序言二、配置文件application.yml三、RabbitMQ交换机和队列配置1、定义4个队列2、定义Fanout交换机和队列绑定关系2、定义Direct交换机和队列绑定关系3、定义Topic交换机和队列绑定关系4、定义Header交换机和队列绑定关系 四、RabbitMQ消费者配置五、RabbitMQ生产者六…...

C++动态库
C动态库 动态库文件(Dynamic Link Library,DLL)是程序在运行时所需要调用的库。静态库文件是程序在编译时所需要调用的库。 1 环境介绍 VS版本:VS2017 编程语言:C 2 功能介绍 使用VS2017项目模板创建C动态库生成…...

【教3妹学编程-算法题】2923. 找到冠军 I
3妹:2哥2哥,你看到新闻了吗?襄阳健桥医院院长 公然“贩卖出生证明”, 真是太胆大包天了吧。 2哥 : 我也看到新闻了,7人被采取刑事强制措施。 就应该好好查查他们, 一查到底! 3妹:真的…...

矢量图形编辑软件Boxy SVG mac中文版软件特点
Boxy SVG mac是一款基于Web的矢量图形编辑器,它提供了一系列强大的工具和功能,可帮助用户创建精美的矢量图形。Boxy SVG是一款好用的软件,并且可以在Windows、Mac和Linux系统上运行。 Boxy SVG mac软件特点 简单易用:Boxy SVG的用…...

神经网络遗传算法函数极值寻优
大家好,我是带我去滑雪! 对于未知的非线性函数,仅仅通过函数的输入和输出数据难以寻找函数极值,这一类问题可以通过神经网络结合遗传算法求解,利用神经网络的非线性拟合能力和遗传算法的非线性寻优能力寻找函数极值。 …...

剑指JUC原理-16.读写锁
👏作者简介:大家好,我是爱吃芝士的土豆倪,24届校招生Java选手,很高兴认识大家📕系列专栏:Spring源码、JUC源码🔥如果感觉博主的文章还不错的话,请👍三连支持&…...

文件改名:避免繁琐操作,利用筛选文件批量重命名技巧优化文件管理
在我们的日常生活和工作中,我们经常需要处理大量的文件,从文档、图片到音频和视频等。在这些情况下,一个高效的文件管理策略至关重要。文件重命名的必要性主要体现在两个方面。首先,对于大量文件,手动进行重命名不仅费…...

【CocoaPods安装环境和流程以及各种情况】
CocoaPods 环境HomebrewRubyrbenvRubyGems 和 Bundler安装Ruby管理Ruby更新Ruby替换Ruby镜像方式1方式2 CocoaPods安装CocoaPodsCocoaPods使用安装的一些问题单元测试引用问题 参考的链接 环境 Homebrew $ brew --config *可以发现打印有下面一行: Homebrew Ruby: …...
canvas与svg区别与实际应用
Canvas和SVG都是HTML5中的绘图技术。但是两者的实现方式和使用场景有所不同。 Canvas是HTML5中的绘图API,它提供了一套基于像素的绘图工具,可以通过JavaScript来实现动态的图形和动画。Canvas提供的绘图功能强大,可以绘制出复杂的图像和动画…...

rasa train nlu详解:1.1-train_nlu()函数
本文使用《使用ResponseSelector实现校园招聘FAQ机器人》中的例子,主要详解介绍train_nlu()函数中变量的具体值。 一.rasa/model_training.py/train_nlu()函数 train_nlu()函数实现,如下所示: def train_nlu(config: Text,nlu_data: Op…...

使用ResponseSelector实现校园招聘FAQ机器人
本文主要介绍使用ResponseSelector实现校园招聘FAQ机器人,回答面试流程和面试结果查询的FAQ问题。FAQ机器人功能分为业务无关的功能和业务相关的功能2类。 一.data/nlu.yml文件 与普通意图相比,ResponseSelector训练数据中的意图采用group/intent格…...

ENVI IDL:如何基于气象站点数据进行反距离权重插值?
01 前言 仅仅练习,大可使用ArcGIS或者已经封装好的python模块进行插值,此处仅仅从底层理解如何从公式和代码理解反距离权重插值的过程,从而更深刻的理解IDL的使用和插值的理解。 02 函数说明 2.1 Read_CSV()函数 官方语法如下:…...

【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...

企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...

力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...

pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)
目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 (1)输入单引号 (2)万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...
Docker拉取MySQL后数据库连接失败的解决方案
在使用Docker部署MySQL时,拉取并启动容器后,有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致,包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因,并提供解决方案。 一、确认MySQL容器的运行状态 …...

VisualXML全新升级 | 新增数据库编辑功能
VisualXML是一个功能强大的网络总线设计工具,专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑(如DBC、LDF、ARXML、HEX等),并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...