JavaScript DOM和事件

DOM

  • Document Object Model
  • 文档对象模型,通过DOM可以来任意来修改网页中各个内容
  • 文档:文档指的是网页,一个网页就是一个文档
  • 对象:对象指将网页中的每一个节点都转换为对象,转换完对象以后,就可以以一种纯面向对象的形式来操作网页了
  • 模型:模型用来表示节点和节点之间的关系,方便操作页面
  • 节点(Node)
    • 节点是构成网页的最基本的单元,网页中的每一个部分都可以称为是一个节点
    • 虽然都是节点,但是节点的类型却是不同的
    • 常用的节点
      • 文档节点 (Document),代表整个网页
      • 元素节点(Element),代表网页中的标签
      • 属性节点(Attribute),代表标签中的属性
      • 文本节点(Text),代表网页中的文本内容

1. DOM操作

  • DOM查询
  • 在网页中浏览器已经为我们提供了document对象,它代表的是整个网页,它是window对象的属性,可以在页面中直接使用。
  • document查询方法:
  1. 根据元素的id属性查询一个元素节点对象:document.getElementById("id属性值");
  2. 根据元素的name属性值查询一组元素节点对象:document.getElementsByName("name属性值");
  3. 根据标签名来查询一组元素节点对象:document.getElementsByTagName("标签名");
  • 元素的属性:
  1. 读取元素的属性:
    语法:元素.属性名
例子:
ele.name  
ele.id  
ele.value 
ele.className
  1. 修改元素的属性:语法:元素.属性名 = 属性值

  2. innerHTML:使用该属性可以获取或设置元素内部的HTML代码

2. 文档的加载

  • 浏览器在加载一个页面时,是按照自上向下的顺序加载的,加载一行执行一行。
  • 如果将js代码编写到页面的上边,当代码执行时,页面中的DOM对象还没有加载,此时将会无法正常获取到DOM对象,导致DOM操作失败。
  1. 解决方式一:可以将js代码编写到body的下边
<body>
    <button id="btn">按钮</button>
    <script>
        var btn = document.getElementById("btn");
        btn.onclick = function(){
					
	};
    </script>
</body>
  1. 解决方式二:
  • 将js代码编写到window.onload = function(){}中
  • window.onload 对应的回调函数会在整个页面加载完毕以后才执行,所以可以确保代码执行时,DOM对象已经加载完毕了
<script>
    window.onload = function(){
        var btn = document.getElementById("btn");
        btn.onclick = function(){
					
	};
    };
</script>

3. DOM查询

1. 通过具体的元素节点来查询

  1. 元素.getElementsByTagName():通过标签名查询当前元素的指定后代元素

  2. 元素.childNodes

    • 获取当前元素的所有子节点
    • 会获取到空白的文本子节点
  3. 元素.children:获取当前元素的所有子元素

  4. 元素.firstChild:获取当前元素的第一个子节点

  5. 元素.lastChild:获取当前元素的最后一个子节点

  6. 元素.parentNode:获取当前元素的父元素

  7. 元素.previousSibling:获取当前元素的前一个兄弟节点

  8. 元素.nextSibling:获取当前元素的后一个兄弟节点

2. innerHTML和innerText

  • 这两个属性并没有在DOM标准定义,但是大部分浏览器都支持这两个属性
  • 两个属性作用类似,都可以获取到标签内部的内容,不同是innerHTML会获取到html标签,而innerText会自动去除标签
  • 如果使用这两个属性来设置标签内部的内容时,没有任何区别的

3. 读取标签内部的文本内容

<h1>h1中的文本内容</h1>
元素.firstChild.nodeValue

4. document对象的其他的属性和方法

  1. document.all:获取页面中的所有元素,相当于document.getElementsByTagName(“*”);

  2. document.documentElement:获取页面中html根元素

  3. document.body:获取页面中的body元素

  4. document.getElementsByClassName()

    • 根据元素的class属性值查询一组元素节点对象
    • 这个方法不支持IE8及以下的浏览器
  5. document.querySelector()

    • 根据CSS选择器去页面中查询一个元素
    • 如果匹配到的元素有多个,则它会返回查询到的第一个元素
  6. document.querySelectorAll()

    • 根据CSS选择器去页面中查询一组元素
    • 会将匹配到所有元素封装到一个数组中返回,即使只匹配到一个

4. DOM修改

  1. document.createElement():可以根据标签名创建一个元素节点对象

  2. document.createTextNode():可以根据文本内容创建一个文本节点对象

  3. 父节点.appendChild(子节点):向父节点中添加指定的子节点

  4. 父节点.insertBefore(新节点,旧节点):将一个新的节点插入到旧节点的前边

  5. 父节点.replaceChild(新节点,旧节点):使用一个新的节点去替换旧节点

  6. 父节点.removeChild(子节点)

    • 删除指定的子节点
    • 推荐方式:子节点.parentNode.removeChild(子节点)

5. DOM对CSS的操作

1. 读取和修改内联样式

  • 使用style属性来操作元素的内联样式

  • 读取内联样式:
    语法:元素.style.样式名

    • 例子:
      • 元素.style.width
      • 元素.style.height
  • 注意:如果样式名中带有-,则需要将样式名修改为驼峰命名法将-去掉,然后-后的字母改大写

  • 比如:

background-color --> backgroundColor
border-width ---> borderWidth

2. 修改内联样式:

  • 语法:元素.style.样式名 = 样式值
  • 通过style修改的样式都是内联样式,由于内联样式的优先级比较高,所以我们通过JS来修改的样式,往往会立即生效,但是如果样式中设置了!important,则内联样式将不会生效。

3. 读取元素的当前样式

  • 正常浏览器

    • 使用getComputedStyle()
    • 这个方法是window对象的方法,可以返回一个对象,这个对象中保存着当前元素生效样式
    • 参数:
      1. 要获取样式的元素
      2. 可以传递一个伪元素,一般传null
    • 例子:获取元素的宽度getComputedStyle(box , null)["width"];
    • 通过该方法读取到样式都是只读的不能修改
  • IE8

    • 使用currentStyle
    • 语法:元素.currentStyle.样式名
    • 例子:box.currentStyle["width"]
    • 通过这个属性读取到的样式是只读的不能修改

4. 其他的样式相关的属性

注意:以下样式都是只读的

  1. clientHeight:元素的可见高度,指元素的内容区和内边距的高度

  2. clientWidth:元素的可见宽度,指元素的内容区和内边距的宽度

  3. offsetHeight:整个元素的高度,包括内容区、内边距、边框

  4. offfsetWidth:整个元素的宽度,包括内容区、内边距、边框

  5. offsetParent

    • 当前元素的定位父元素
    • 离他最近的开启了定位的祖先元素,如果所有的元素都没有开启定位,则返回body
  6. offsetLeft,offsetTop

    • 当前元素和定位父元素之间的偏移量
    • offsetLeft水平偏移量 offsetTop垂直偏移量
  7. scrollHeight,scrollWidth:获取元素滚动区域的高度和宽度

  8. scrollTop,scrollLeft:获取元素垂直和水平滚动条滚动的距离

  9. 判断滚动条是否滚动到底

    • 垂直滚动条:scrollHeight - scrollTop = clientHeight

    • 水平滚动:scrollWidth - scrollLeft = clientWidth

6. 事件(Event)

  • 事件指的是用户和浏览器之间的交互行为。比如:点击按钮、关闭窗口、鼠标移动。。。
  • 我们可以为事件来绑定回调函数来响应事件。
  • 绑定事件的方式:
  1. 可以在标签的事件属性中设置相应的JS代码
例子:
<button onclick="js代码。。。">按钮</button>

2.可以通过为对象的指定事件属性设置回调函数的形式来处理事件

例子:
<button id="btn">按钮</button>
<script>
    var btn = document.getElementById("btn");
    btn.onclick = function(){
						
    };
</script>

7. 事件对象

  • 当响应函数被调用时,浏览器每次都会将一个事件对象作为实参传递进响应函数中,这个事件对象中封装了当前事件的相关信息,比如:鼠标的坐标,键盘的按键,鼠标的按键,滚轮的方向。。
  • 可以在响应函数中定义一个形参,来使用事件对象,但是在IE8以下浏览器中事件对象没有做完实参传递,而是作为window对象的属性保存
  • 例子:
元素.事件 = function(event){
    event = event || window.event;
				
};
			
元素.事件 = function(e){
    e = e || event;
				
};

8. 事件的冒泡(Bubble)

  • 事件的冒泡指的是事件向上传导,当后代元素上的事件被触发时,将会导致其祖先元素上的同类事件也会触发。
  • 事件的冒泡大部分情况下都是有益的,如果需要取消冒泡,则需要使用事件对象来取消
  • 可以将事件对象的cancelBubble设置为true,即可取消冒泡
  • 例子:
元素.事件 = function(event){
    event = event || window.event;
    event.cancelBubble = true;
};

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在C++中,工厂模式的思考(《C++20设计模式》及常规设计模式对比)

文章目录 一、前言二、讲解1、构造函数的弊端2、工厂方法&#xff08;解决上述弊端&#xff09;3、简单工厂3.1 **UML类图**3.2 **实现** 4、工厂模式4.1 **UML类图**4.2 **实现** 5、抽象工厂5.1 **UML类图**5.2 **实现** 三、总结 一、前言 在看《C20设计模式》一书中产生了…

【软件测试】快速定位bug,编写测试用例

作为一名测试人员如果连常见的系统问题都不知道如何分析&#xff0c;频繁将前端人员问题指派给后端人员&#xff0c;后端人员问题指派给前端人员&#xff0c;那么在团队里你在开发中的地位显而易见 &#xff0c;口碑、升值、加薪那应该是你遥不可及的梦 但是作为测试人员来说&…

【ARMv8/v9 GIC 系列 5 -- GIC GICD_CTRL 使用详细介绍】

文章目录 GICD_CTRLGICD_CTLR 寄存器结构RWP&#xff08;Register Write Pending&#xff09;E1NWF&#xff08;Enable 1 of N Wakeup Functionality&#xff09;DS&#xff08;Disable Security&#xff09; 亲和性路由&#xff08;Affinity Routing&#xff09;ARE_NSARE_S 中…

华侨大学24计算机考研数据速览,专硕22408复试线290分,学硕11408接收调剂!

华侨大学计算机专业创建于1980年&#xff0c;是福建省最早设立计算机专业的高校之一。1982年成立计算机系&#xff0c;2008年成立计算机科学与技术学院。根据“华侨大学计算机科学与技术学院网站”资料&#xff0c;该院有计算机科学与技术、软件工程、网络工程3个本科专业&…

Mysql-基础-DDL操作

1、数据库操作 查询 查询所有数据库 show databases; 创建 创建数据库 create database [if not exists] 数据库名 使用及查询 use 数据库名 select database() 查询当前所处数据库 删除 drop database [if not exists] 数据库名 2、表操作 查询当前库中的所…

使用Python绘制彩虹效果:动态彩虹动画

文章目录 引言准备工作前置条件 代码实现与解析导入必要的库初始化Pygame定义绘制彩虹函数定义颜色列表主循环 完整代码 引言 彩虹是自然界中最美丽的现象之一。通过编程&#xff0c;我们可以将这一奇妙的景象带到屏幕上。在这篇博客中&#xff0c;我们将使用Python来创建一个…

如何优化网站SEO排名?

选择那些容易排名的关键词。使用工具找到那些竞争少但有流量的词语。其次&#xff0c;内部链接非常重要。通过合理的内部链接&#xff0c;可以提升各个页面的权重。 增加FAQ部分能帮助你捕捉更多的长尾关键词流量。争取出现在精选摘要的位置&#xff0c;可以直接提升你的曝光率…

django 逆向生成对应数据库表的models模型类 —— python

一&#xff0c;在setting.py中配置好连接数据库的参数 在setting中的DATABASESZ中配置默认参数&#xff0c;并在INSTALLED_APPS中导入模块名。 DATABASES {default:{ENGINE: django.db.backends.mysql, # 数据库引擎NAME: jljupcs, # 数据库名称HOST: 127.0.0.1, # 数据库…

【设计模式】策略模式(定义 | 特点 | Demo入门讲解)

文章目录 定义策略模式的结构 QuickStart | DemoStep1 | 策略接口Step2 | 策略实现Step3 | 上下文服务类Step4 | 客户端 策略模式的特点优点缺点 定义 策略模式Strategy是一种行为模式&#xff0c;它能定义一系列算法&#xff0c;并将每种算法分别放入到独立的类中&#xff0c…

解决pip安装时的“SyntaxError: invalid syntax”错误

项目场景&#xff1a; 项目中有新的成员加入时&#xff0c;第一步就是安装开发环境&#xff0c;然而往往同样的机器、同样的配置&#xff0c;我们却总能遇到各种各样不同的问题。 今天分享一个简单的操作问题。 问题描述 项目用到pandas&#xff0c;安装pandas时遇到Syntax…

代码随想录-Day46

121. 买卖股票的最佳时机 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票&#xff0c;并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从…

CAN学习笔记

学习链接&#xff1a;CAN学习笔记&#xff08;1&#xff09;_can sjw-CSDN博客 内容全部取自链接&#xff0c;非原创。用于自己学习和记录&#xff0c;如有错误请指正。如果侵权了&#xff0c;请联系我删掉。 CAN主要有两种物理层&#xff0c;1.闭环的ISO11898 2.开环的ISO1…

MSI安装包安装的Mysql8,配置文件my.ini在哪儿?

版本 我安装的版本是8.0.36&#xff0c;server根目录下没有配置文件。 文件位置 首先找到对应的windows服务 右击属性&#xff0c;可以看到启动参数&#xff0c;启动参数中有配置文件的路径 比如我的配置文件在"C:\ProgramData\MySQL\MySQL Server 8.0\my.ini"

XHS xs逆向分析

已经把所有的侵权地方删除&#xff0c;望批准 前言 1.本文单纯学习jsvmp和交流&#xff0c;无任何其他意图 2.学习jsvmp&#xff0c;通过插桩和算法还原。 问&#xff1a;什么是vmp&#xff1f; JSVMP&#xff08;JavaScript Virtual Machine Protocol&#xff09;是一种…

严蔚敏数据结构(C语言版)吴伟民宁编著清华大学计算机系列教材+题集+配套题库+笔记+习题PDF电子版

今天分享的是 严蔚敏数据结构&#xff08;C语言版&#xff09;题集配套题库笔记习题PDF电子版 注&#xff1a;本资源搜集于网络&#xff0c;仅供学习交流&#xff0c;严禁用于商业用途 内容简介&#xff1a; “数据结构”是计算机程序设计的重要理论技术基础&#xff0c;它…

002 使用kibana操作ElasticSearch7.x

文章目录 4.使用kibana操作es4.1.文档操作1.put方式发送数据2.post方式发送数据3.查看索引文档 GET4.更新文档 POST5.删除文档&索引 DELETE6.批量添加数据_bulk 4.2.Query DLS(查询领域对象语言)1.url 检索数据语法2.查询所有数据3.查询全部数据并排序4.查询全部数据排序并…

蓝蜂网关接入雄安新区物联网统一开放平台应用案例

蓝蜂网关接入雄安新区物联网统一开放平台案例 一、应用背景 为响应国家《河北雄安新区规划纲要》&#xff0c;由中国雄安集团数字城市科技有限公司牵头&#xff0c;以中移物联网有限公司为牵头单位的联合体&#xff0c;构建了雄安新区物联网统一开放平台&#xff08;简称雄安…

2024英语专业大学排名一览表

英语专业排名前10名的大学是&#xff1a;北京大学、北京外国语大学、上海外国语大学、黑龙江大学、上海交通大学、南京大学、浙江大学、广东外语外贸大学、清华大学、北京航空航天大学&#xff0c;以下是查大学网&#xff08;www.chadaxue.com&#xff09;整理的2024英语专业大…

AI与大模型工程师证书研修班报名啦!

人工智能大模型是指拥有超大规模参数&#xff08;通常在十亿个以上&#xff09;、超强计算资源的机器学习模型&#xff0c;能够处理海量数据&#xff0c;完成各种复杂任务&#xff0c;如自然语言处理、图像识别等。计算机硬件性能不断提升&#xff0c;深度学习算法快速优化&…

js替换对象里面的对象名称

data为数组&#xff0c;val为修改前的名称&#xff0c;name为修改后的名称 JSON.parse(JSON.stringify(data).replace(/val/g, name)) &#xff1b; 1.替换data里面的对象tenantInfoRespVO名称替换成tenantInfoUpdateReqVO 2.替换语句&#xff1a; 代码可复制 let tenantInf…