元素和节点

节点操作和事件

今日目标:

节点的概念和分类

节点的创建,插入,替换,删除操作

事件三要素

常用事件类型

0.回顾

# 1. 获取元素的尺寸
offset一套
dom.offsetWidth: 内容 + 内边距 + 边框
dom.offsetHeightclient一套
dom.clientWidth: 内容 + 内边距
dom.clientHeight# 2. 获取可视窗口的尺寸
BOM方式:
window.innertWidth | window.innerHeight: 包含了滚动条DOM方式:
document.documentElement.clientWidth | document.documentElement.clientHeight: 不包含滚动条# 3. 获取元素的偏移量
// 偏移量:当前元素距离有定位的祖先元素的左边和上边的距离
// 如果没有有定位的祖先元素,会将body元素作为定位父级
dom.offsetLeft | dom.offsetTop

1.节点的概念

# 页面中的所有元素都是节点。节点组成了一个完整的页面。
# 我们可以对节点进行各种操作:通过父子关系,兄弟关系进行一系列创建,插入,替换,删除,克隆等操作

2.节点的分类

# 标签: 元素节点
# 文本节点(包含了换行和空格)
# 属性节点 (href, title, src...+ 不能通过父子关系或者兄弟关系获取
# 注释节点 (包含了换行和空格)

3.获取节点

// 获取所有子节点:dom.childNodes, 返回伪数组// 获取属性节点: dom.attributes, 返回伪数组// 通过父子关系后获取子节点
// 获取所有子元素节点 
// children(重点)
console.log(divEle.children);// 获取第一个子节点
// firstChild
console.log(divEle.firstChild);
// 获取第一个子元素节点
// firstElemnetChild
console.log(divEle.firstElementChild);
// children[0]
console.log(divEle.children[0]);// 获取最后一个子节点
// lastChild
console.log(divEle.lastChild);
// 获取最后一个子元素节点
// lastElementChild
console.log(divEle.lastElementChild);
// children[divEle.children.length - 1]
console.log(divEle.children[divEle.children.length - 1]);// 通过兄弟关系获取节点
// 获取上一个兄弟节点
// previousSibling
console.log(divEle.previousSibling);
// 获取上一个元素兄弟节点。区别:以为节点之间包含了一个文本节点,换行符。空格都是节点。所以要元素阶段。加element
// previousElementSibling
console.log(divEle.previousElementSibling);// 获取下一个兄弟节点
// nextSibling
console.log(divEle.nextSibling);
// 获取下一个元素兄弟节点
// nextElementSibling
console.log(divEle.nextElementSibling);// 通过父子关系获取父级节点: 一般来说父级节点都是元素节点
// parentNode (重点,获取父亲)
// 注意:只能通过parentNode来逐级获取祖先节点
console.log(divEle.parentNode.parentNode.parentNode);

4.创建节点和插入节点

 # 创建节点var node = document.createElment('标签名')'注意:1. 节点创建好了,必须要插入,否则不会渲染在页面上; 2. 创建好的节点只能使用一次,后面的优先级更高'# 插入节点方式一: 父节点.appendChild(节点名):往父节点的末尾插入节点方式二: 父节点.insertBefore('插入的节点', '在谁前面')

5.替换节点

# 父节点.replaceChild('换上的节点', '换下的节点')// 1. 获取元素
var divEle = document.querySelector('div')// 2. 创建节点
var emEle = document.createElement('em')// 3. 添加内容
emEle.innerHTML = '我是新创建的节点'// 4. 替换节点 (替换最后一个子节点)
// replaceChild(换上的节点, 换下的节点)
divEle.replaceChild(emEle, divEle.children[divEle.children.length - 1])

6.删除节点

# 1. 删除子节点父节点.removeChild('子节点')# 2. 删除自身(自杀)dom.remove()// 1. 获取元素
var divEle = document.querySelector('div')
var btn = document.querySelector('button')btn.onclick = function () {// 2. 删除子节点// 父节点.removeChild('节点名')// divEle.removeChild(divEle.children[divEle.children.length - 1])// 3. 删除自己(自杀)divEle.remove()
}

7.事件

概念: 捕获用户的交互行为,并根据交互行为实现特定的交互效果

事件三要素:

  1. 事件源: 谁绑定了事件(事件的绑定者)
  2. 事件类型:比如点击鼠标,按下键盘等
  3. 事件处理函数: 该事件所要达到的目的
    1. divEle.onclick = function() { console.log(1111) }

8.事件绑定的两种方式

// 绑定事件
// DOM0级事件(传统方式)
// 语法: dom.on+事件类型 = 事件处理函数
// 注意:通过传统方式给相同的dom节点绑定多个相同类型的事件,只会有最后一个生效
// divEle.onclick = function () {
//     // 代码块
//     console.log('传统方式1');
// }// divEle.onclick = function () {
//     // 代码块
//     console.log('传统方式2');
// }// DOM2级事件 (事件监听)
// 语法: dom.addEventListener('事件类型', function(){ // 代码块 })
// 注意:通过事件监听的方式给相同的dom节点绑定多个相同类型的事件,每个事件会依次触发
divEle.addEventListener('click', function () {console.log('事件监听函数1');
})divEle.addEventListener('click', function () {console.log('事件监听函数2');
})

9.解绑事件的两种方式

# 解绑传统方式绑定的事件
dom.on+事件类型 = null# 解绑事件监听绑定的事件
dom.removeEventListener('事件类型', 函数名)

10.鼠标事件

// 鼠标事件// click: 点击事件(点击一次鼠标左键触发)// divEle.addEventListener('click', function () {//     console.log('鼠标点击事件');// })// dblclick: 双击事件: 在300ms内连续点击鼠标左键两次时触发的事件// divEle.addEventListener('dblclick', function () {//     console.log('鼠标双击事件');// })// // contextmenu: 鼠标右键触发的事件// divEle.addEventListener('contextmenu', function () {//     console.log('鼠标右键事件');// })// mousedown 鼠标按下事件// divEle.addEventListener('mousedown', function () {//     console.log('按下了鼠标左键');// })// // mouseup: 鼠标弹起事件// divEle.addEventListener('mouseup', function () {//     console.log('松开了鼠标左键');// })// // mousemove: 鼠标移动事件// divEle.addEventListener('mousemove', function () {//     console.log('移动着鼠标');// })// mouseover: 鼠标移入事件divEle.addEventListener('mouseover', function () {console.log('移入了当前元素');})// mouseout: 鼠标移出事件divEle.addEventListener('mouseout', function () {console.log('移除了当前元素');})// mouseenter: 鼠标移入事件// divEle.addEventListener('mouseenter', function () {//     console.log('移入了当前元素');// })// // mouseleave: 鼠标移出事件// divEle.addEventListener('mouseleave', function () {//     console.log('移除了当前元素');// })// 注意:mouseover和mouseout支持子元素的移入移出事件; mouseenter和mouseleave不支持子元素的移入移出

11.键盘事件

 // 键盘事件:根据键盘操作行为触发的事件var inpEle = document.querySelector('input')// 1. keydown: 键盘按下事件// 注意:所有的按钮都支持该事件// inpEle.onkeydown = function () {//     console.log('按下了键盘');// }// 2. keyup: 键盘弹起事件// inpEle.onkeyup = function () {//     console.log('松开了键盘');// }// 3. keypress: 键盘键入事件// 注意:1. 按下了按键必须得出现真的内容// 注意:2. 按下的内容要和出现的内容一样// 注意:3. 支持回车键inpEle.onkeypress = function () {console.log('键盘键入事件');}

12.表单事件

 // 表单事件: 只有表单元素才能触发的事件var kuangEle = document.querySelector('.kuang')var textEle = document.querySelector('.text')var formEle = document.querySelector('form')var btn = document.querySelector('button')// change: 当表单元素的内容发生改变后才会触发的事件kuangEle.onchange = function () {console.log('切换了复选框的选中状态');}textEle.onchange = function () {console.log('输入框的值发生了改变');}// focus: 获取焦点事件textEle.onfocus = function () {console.log('你聚焦了我');}// blur: 失去焦点事件 (失焦的前提是必须有焦点)textEle.onblur = function () {console.log('失焦了哦');}// input: 输入事件(边输入边触发的事件)textEle.oninput = function () {console.log('输入事件');}// 表单提交事件(只能用给form表单标签)type = 'submit'会刷新表单,改为type = 'button',则无刷新提交// submit: 表单提交事件btn.onclick = function () {formEle.onsubmit()}

13.触摸事件

  // 触摸事件: 当手指在移动端设备上触摸时,触发的事件var boxEle = document.querySelector('.box')// touchstart: 手指放到屏幕上boxEle.ontouchstart = function () {console.log('我要开始摸了');}// touchmove: 手指在屏幕上滑动boxEle.ontouchmove = function () {console.log('我正在摸');}// touchend: 手指离开屏幕boxEle.ontouchend = function () {console.log('我模完了');}

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

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

相关文章

软考 网络工程师 每日学习打卡 2024/3/21

学习内容 第8章 网络安全 本章主要讲解网络安全方面的基础知识和应用技术。针对考试应该掌握诸如数据加密、报文认 证、数字签名等基本理论,在此基础上深入理解网络安全协议的工作原理,并能够针对具体的 网络系统设计和实现简单的安全解决方案。 本章共有…

C语言经典例题(5) --- 交换数组、统计二进制、交换变量、菱形、字符串左旋

文章目录 1.交换数组2.统计二进制中1的个数3.交换两个变量(不创建临时变量)4.打印菱形5.字符串左旋 1.交换数组 将数组A中的内容和数组B中的内容进行交换。(数组大小一样) #include <stdio.h>void swap(int arr1[],int arr2[], int sz) {int tmp 0;for (int i 0;i &l…

python云上水果超市的设计与实现flask-django-php-nodejs

伴随着我国社会的发展&#xff0c;人民生活质量日益提高。于是对云上水果超市进行规范而严格是十分有必要的&#xff0c;所以许许多多的信息管理系统应运而生。此时单靠人力应对这些事务就显得有些力不从心了。所以本论文将设计一套云上水果超市&#xff0c;帮助商家进行商品信…

如何为您的网站压缩图像

今天碰到一个客户反馈&#xff0c;他在hostease购买了虚拟主机&#xff0c;创建的WordPress站点图片比较多&#xff0c;后来访问网站&#xff0c;页面上大量的图片加载时间较长&#xff0c;咨询网站图像如何压缩。我们为用户提供网站图像压缩&#xff0c;用户很快完成了设置。在…

【Pt】新建项目时的设置

新建项目时需要在如下界面做一些设置。 一、模板与文件 模板通常选择“PBR - Metallic Roughness Alpha-blend” 文件可以选择fbx&#xff0c;abc&#xff0c;obj等格式的三维模型文件 二、项目设置 2.1 文件分辨率 指的是在软件中的预览效果&#xff0c;分辨率越高预览效果…

使用npm创建一个全局的cli命令,就像vue-cli一样

我们用过vue-cli等工具包&#xff0c;全局安装之后&#xff0c;我们可以直接使用vue create等命令&#xff0c;实际上能够这样使用的原因&#xff0c;就是使用了package.json里面的bin字段注册命令。接下来就以一个脚本文件为例子为大家演示一下bin是如何发挥作用的。 创建项目…

跳过mysql权限验证来修改密码-GPT纯享版

1.打开 MySQL 的配置文件&#xff0c;通常是 my.ini 或 my.cnf。 2.找到 [mysqld] 部分&#xff0c;如果没有则添加。 3.在 [mysqld] 部分中添加一行&#xff1a;skip-grant-tables&#xff0c;这个选项告诉 MySQL 服务器跳过权限验证&#xff0c;允许任何用户连接而不需要密码…

OpenCV基于阈值的分割技术详细介绍

OpenCV 提供了基于阈值的分割技术&#xff0c;这是一种简单且常用的图像分割方法&#xff0c;其基本思想是根据像素的灰度值将图像分为不同的区域。下面详细介绍了 OpenCV 中基于阈值的分割技术&#xff1a; 全局阈值分割&#xff08;Global Thresholding&#xff09;&#xff…

java数据结构与算法基础-----排序------堆排序

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 堆排序是利用堆&#xff08;数据结构&#xff09;设计的排序算法…

基于SSM+Jsp+Mysql的KTV点歌系统

基于SSMJspMysql的KTV点歌系统 基于SSMJspMysql的KTV点歌系统的设计与实现 开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工…

SRC中的一些信息收集姿势

前言 前前后后挖了四个月的EDUSRC&#xff0c;顺利从路人甲升到了网络安全专家&#xff0c;从提交的内容来看大部分还是以中低危为主&#xff0c;主打的就是弱口令和未授权。 在这过程中还是比较浮躁的&#xff0c;因此接下来的时间还是要好好沉淀一下自身的技术&#xff0c;学…

undo log

从这篇「执行一条 SQL 查询语句&#xff0c;期间发生了什么&#xff1f; (opens new window)」中&#xff0c;我们知道了一条查询语句经历的过程&#xff0c;这属于「读」一条记录的过程&#xff0c;如下图&#xff1a; 那么&#xff0c;执行一条 update 语句&#xff0c;期间发…

Unix环境高级编程-学习-07-多线程之互斥锁

目录 一、自由抒发 二、函数介绍 1、pthread_mutex_init &#xff08;1&#xff09;声明 &#xff08;2&#xff09;作用 &#xff08;3&#xff09;参数 &#xff08;4&#xff09;返回值 &#xff08;5&#xff09;注意点 &#xff08;6&#xff09;宏 2、pthread_mut…

【大数据】四、HDFS 基础操作

IDE 连接 在本地电脑上解压 hadoop.tar.gz&#xff0c;配置环境变量 之后 去github 上 把 winutil.exe 和 hadoop.dll 下载到 hadoop 的bin 文件夹下 再修改 etc/hadoop-env.cmd 中的 JDK 路径 我们使用 IDEA 打开一个 JAVA Maven项目&#xff0c;进行测试 注意&#xff0…

vue3 报错 require is not defined

问题 require is not defined 原因 vite 不支持require的用法&#xff0c; webpack是支持的 解决 方法一&#xff1a; 更改vite使用语法 vite官网 方法二 安装转换插件vite-plugin-require-transform 仓库地址 参考 关于Vite不能使用require问题 方法二Vite 踩坑 —— …

一文详解大数据时代与低代码开发应用

随着信息技术的飞速发展&#xff0c;我们迎来了一个崭新的时代——大数据时代。在这个时代&#xff0c;数据成为了一种新的资源&#xff0c;大数据技术的应用成为了推动社会进步的关键力量。而在大数据技术的浪潮中&#xff0c;低代码开发应用也逐渐崭露头角&#xff0c;以其高…

鸿蒙开发-UI-动画-页面间动画

鸿蒙开发-UI-组件导航-Navigation 鸿蒙开发-UI-组件导航-Tabs 鸿蒙开发-UI-图形-图片 鸿蒙开发-UI-图形-绘制几何图形 鸿蒙开发-UI-图形-绘制自定义图形 鸿蒙开发-UI-图形-页面内动画 鸿蒙开发-UI-图形-组件内转场动画 鸿蒙开发-UI-图形-弹簧曲线动画 文章目录 前言 一、放大缩…

【TD3思路及代码】【自用笔记】

1 组成&#xff08;Target Network Delayed Training&#xff09; Actor网络&#xff1a;这个网络负责根据当前的状态输出动作值。在训练过程中&#xff0c;Actor网络会不断地学习和优化&#xff0c;以输出更合适的动作。Critic网络&#xff1a;TD3中有两个Critic网络&#xff…

【LeetCode-22.括号生成】

题目详情&#xff1a; 数字 n 代表生成括号的对数&#xff0c;请你设计一个函数&#xff0c;用于能够生成所有可能的并且 有效的 括号组合。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;["((()))","(()())","(())()","()(…

第十四章 TypeScript tsconfig.json配置文件

生成tsconfig.json 文件 这个文件是通过tsc --init命令生成的 配置详解 "compilerOptions": {"incremental": true, // TS编译器在第一次编译之后会生成一个存储编译信息的文件&#xff0c;第二次编译会在第一次的基础上进行增量编译&#xff0c;可以提…