前端JS学习(二):BOM、DOM对象与事件

Web API基本认知

Web API 的作用:使用JS去操作html和浏览器
Web API 的分类:DOM(网页文档对象模型)、BOM(浏览器对象模型)

BOM

  BOM的全称是 Browser Object Model,浏览器对象模型。也就是 JavaScript 将浏览器的各个组成部分封装成了对象,如果要操作浏览器的部分功能,可以通过操作 BOM 对象的相关属性或者函数来完成。

BOM中提供了如下5个对象:

对象名称描述
Window浏览器窗口对象
Navigator浏览器对象
Screen屏幕对象
History历史记录对象
Locationd地址栏对象

.
  上述5个对象与浏览器各组成对应的关系如下图所示:
在这里插入图片描述
对于上述5个对象,重点学习的是Window对象、Location对象。

Window对象

  window 对象指的是浏览器窗口对象,是JavaScript的全部对象,所以对于window对象,可以直接使用,并且对于window对象的方法和属性,可以省略 window 。
  例如:之前的alert()函数其实是属于window对象的,其完整的代码如下:

window.alert('hello');// 省略 window
alert('hello')

  所以对于window对象的属性和方法,通常都是采用简写的方式。

  window对象提供了获取其他BOM对象的属性:

属性描述
Navigator用于获取Navigator对象
Screen用于获取Screen对象
History用于获取history对象
Location用于获取location对象

  window也提供了一些常用的函数,如下表格所示:

函数描述
alert()显示带有一段消息和一个确认按钮的警告框。
comfirm()显示带有一段消息以及确认按钮和取消按钮的对话框。
setInterval()按照指定的周期(以毫秒计)来调用函数或计算表达式。
setTimeout()在指定的毫秒数后调用函数或计算表达式。

  alert()函数:弹出警告框,函数的内容就是警告框的内容

<script>//window对象是全局对象,window 对象的属性和方法在调用时可以省略 window.window.alert("Hello BOM");alert("Hello BOM Window");
</script>

在这里插入图片描述

  confirm()函数:弹出确认框,并且提供用户2个按钮,分别是确认和取消。

<script>confirm("您确认删除该记录吗?");
</script>

在这里插入图片描述

  但是怎么知道用户点击了确认还是取消呢?所以这个函数有一个返回值,当用户点击确认时,返回true,点击取消时,返回false。再次运行,可以查看返回值 true 或者 false ,就根据返回值来决定是否执行后续操作。修改代码如下:

<script>var flag = confirm("您确认删除该记录吗?");alert(flag);
</script>

  setInterval(fn,毫秒值):定时器,用于周期性的执行某个功能,并且是循环执行。

该函数需要传递2个参数:fn:函数,需要周期性执行的功能代码毫秒值:间隔时间
<script>//定时器 - setInterval -- 周期性的执行某一个函数var i = 0;setInterval(function(){i++;console.log("定时器执行了"+i+"次");},2000);
</script>

在这里插入图片描述

  setTimeout(fn,毫秒值) :定时器,只会在一段时间后执行一次功能。

<script>//定时器 - setTimeout -- 延迟指定时间执行一次setTimeout(function(){alert("JS");},3000);
</script>

Location对象

  location是指代浏览器的地址栏对象,对于这个对象,常用的是href属性,用于获取或者设置浏览器的地址信息,添加如下代码:

//获取浏览器地址栏信息
alert(location.href);//设置浏览器地址栏信息
location.href = "https://www.itcast.cn";

DOM对象

  DOM:Document Object Model 文档对象模型。也就是 JavaScript 将 HTML 文档的各个组成部分封装为对象。封装的对象分为

Document:整个文档对象
Element:元素对象
Attribute:属性对象
Text:文本对象
Comment:注释对象

如下图,左边是 HTML 文档内容,右边是 DOM 树
在这里插入图片描述

DOM技术主要作用如下:
 改变 HTML 元素的内容
 改变 HTML 元素的样式(CSS)
 对 HTML DOM 事件作出反应
 添加和删除 HTML 元素

获取DOM对象

  HTML 中的 Element 对象可以通过 Document 对象获取,而 Document 对象是通过window 对象获取的。document 对象提供的用于获取 Element 元素对象的 api 如下表所示:

函数描述
document.getElementById()根据id属性值获取,返回单个Element对象
document.getElementsByTagName()根据标签名称获取,返回Element对象数组
document.getElementsByName()根据name属性值获取,返回Element对象数组
document.getElementsByClassName()根据class属性值获取,返回Element对象数组

  document.getElementById(): 根据标签的id属性获取标签对象,id是唯一的,所以获取到是单个标签对象。代码如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>JS-对象-DOM</title>
</head><body><img id="h1" src="img/off.gif"> <br><br><div class="cls">传智教育</div>	<br><div class="cls">黑马程序员</div> <br><input type="checkbox" name="hobby"> 电影<input type="checkbox" name="hobby"> 旅游<input type="checkbox" name="hobby"> 游戏
</body><script>//1.1 获取元素-根据ID获取var img = document.getElementById('h1');alert(img);
</script></html>

在这里插入图片描述
.
  document.getElementsByTagName() : 根据标签的名字获取标签对象,同名的标签有很多,所以返回值是数组。代码如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>JS-对象-DOM</title>
</head><body><img id="h1" src="img/off.gif"> <br><br><div class="cls">传智教育</div>	<br><div class="cls">黑马程序员</div> <br><input type="checkbox" name="hobby"> 电影<input type="checkbox" name="hobby"> 旅游<input type="checkbox" name="hobby"> 游戏
</body><script>//1.2 获取元素-根据标签获取 - divvar divs = document.getElementsByTagName('div');for (let i = 0; i < divs.length; i++) {alert(divs[i]);}
</script></html>

在这里插入图片描述

.
  document.getElementsByName() :根据标签的name的属性值获取标签对象,name属性值可以重复,所以返回值是一个数组。代码如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>JS-对象-DOM</title>
</head><body><img id="h1" src="img/off.gif"> <br><br><div class="cls">传智教育</div><br><div class="cls">黑马程序员</div> <br><input type="checkbox" name="hobby"> 电影<input type="checkbox" name="hobby"> 旅游<input type="checkbox" name="hobby"> 游戏
</body><script>//1.3 获取元素-根据name属性获取var ins = document.getElementsByName('hobby');for (let i = 0; i < ins.length; i++) {alert(ins[i]);}
</script></html>

在这里插入图片描述

.
  document.getElementsByClassName() : 根据标签的class属性值获取标签对象,class属性值也可以重复,返回值是数组。代码如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>JS-对象-DOM</title>
</head><body><img id="h1" src="img/off.gif"> <br><br><div class="cls">传智教育</div><br><div class="cls">黑马程序员</div> <br><input type="checkbox" name="hobby"> 电影<input type="checkbox" name="hobby"> 旅游<input type="checkbox" name="hobby"> 游戏
</body><script>//1.4 获取元素-根据class属性获取var divs = document.getElementsByClassName('cls');for (let i = 0; i < divs.length; i++) {alert(divs[i]);}
</script></html>

在这里插入图片描述

  
  

操作标签属性

  那么获取到标签了,如何操作标签的属性呢?通过查询文档资料,如下图所示:
在这里插入图片描述

  发现可以通过div标签对象的innerHTML属性来修改标签的内容。例如:把页面中的传智教育替换成传智教育666,所以要获取2个div中的第一个,所以可以通过下标0获取数组中的第一
个div,编写如下代码:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>JS-对象-DOM</title>
</head><body><img id="h1" src="img/off.gif"> <br><br><div class="cls">传智教育</div><br><div class="cls">黑马程序员</div> <br><input type="checkbox" name="hobby"> 电影<input type="checkbox" name="hobby"> 旅游<input type="checkbox" name="hobby"> 游戏
</body><script>	var divs = document.getElementsByClassName('cls');var div1 = divs[0];div1.innerHTML = "传智教育666";
</script></html>

案例分析

需求如下:
  点亮灯泡
  将所有的div标签的标签体内容后面加上:very good
  使所有的复选框呈现被选中的状态

效果如下所示:
在这里插入图片描述
  
  
需求1:点亮灯泡
分析:需要把灯泡点亮,其实就是换一张图片。那么需要切换图片就需要操作图片的 src 属性。要操作图片的src属性,就需要先来获取img标签对象。即,首先获取img标签对象,然后修改 img 标签对象的 src 属性值,进行图片的切换

<script>// 获取img标签对象var img = document.getElementById('h1');// 修改img标签对象的src属性值,进行图片的切换img.src = "img/on.gif";
</script>

  
  
需求2:将所有的div标签的标签体内容后面加上:very good 并且为红色字体
分析:需要在原有内容后面追加红色的 very good.所以先要获取原有内容,然后再进行内容的追加。但是,如何保证very good是红色的呢?可以通过 html 中 的< font> 标签和属性来完成。如何进行内容的替换呢?可以通过 innerHTML 属性。需要替换2个 div 的内容,所以需要获取2个 div,并且遍历进行替换。

<script>	var divs = document.getElementsByTagName('div');for (let i = 0; i < divs.length; i++) {const div = divs[i];div.innerHTML += "<font color='red'>very good</font>";}</script>

  
  
需求3:使所有的复选框呈现被选中的状态
分析:要让复选框处于选中状态,就要将 checkbox 标签对象的 checked 属性设置为 true,可以改变checkbox为选中状态。因此,需要获取所有的checkbox并且遍历

<script>	var ins = document.getElementsByName('hobby');for (let i = 0; i < ins.length; i++) {ins[i].checked=true;}
</script>

  
  
完整代码

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>DOM对象案例</title>
</head><body><img id="h1" src="img/off.gif"> <br><br><div class="cls">传智教育</div><br><div class="cls">黑马程序员</div> <br><input type="checkbox" name="hobby"> 电影<input type="checkbox" name="hobby"> 旅游<input type="checkbox" name="hobby"> 游戏
</body><script>var img = document.getElementById('h1');img.src = "img/on.gif";// var divs = document.getElementsByTagName('div');for (let i = 0; i < divs.length; i++) {const div = divs[i];div.innerHTML += "<font color='red'>very good</font>";}var ins = document.getElementsByName('hobby');for (let i = 0; i < ins.length; i++) {ins[i].checked=true;}</script></html>

  

JavaScript事件

  HTML事件是发生在HTML元素上的 “事情”,例如:按钮被点击、鼠标移到元素上、输入框失去焦点等。

在这里插入图片描述
  给这些事件绑定函数,当事件触发时,可以自动的完成对应的功能。这就是事件监听。JavaScript 事件是 js 非常重要的一部分,主要学习事件绑定、常用事件。

  

事件绑定

  JavaScript对于事件的绑定提供了 通过html标签中的事件属性进行绑定通过DOM中Element元素的事件属性进行绑定 2 种方式。

  
  
方式1:通过html标签中的事件属性进行绑定
  例如:一个按钮,对于按钮绑定单机事件,可以借助标签的 onclick 属性,属性值指向一个函数。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><button onclick="on()">这是一个按钮</button><input type="button" id="btn1" value="事件绑定1" onclick="on()">
</body><script>function on(){alert("按钮1被点击了...");}
</script></html>

在这里插入图片描述

  
  
方式2:通过DOM中Element元素的事件属性进行绑定
  依据 DOM 的知识点,html 中的标签可以被加载成 element 对象,所以也可以通过 element 对象的属性来操作标签的属性。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><input type="button" id="btn1" value="事件绑定1">
</body><script>document.getElementById('btn1').onclick = function(){alert("按钮2被点击了...");}
</script></html>

需要注意的是:事件绑定的函数,只有在事件被触发时,函数才会被调用。
  
  

常见事件

常用事件属性如下:

事件属性名说明
onclick鼠标单击事件
onblur元素失去焦点
onfocus元素获得焦点
onload某个页面或图像被完成加载
onsubmit当表单提交时触发该事件
onmouseover鼠标被移到某元素之上
onmouseout鼠标从某元素移开
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>JS-事件-常见事件</title>
</head><body onload="load()"><form action="" style="text-align: center;" onsubmit="subfn()"><input type="text" name="username" onblur="bfn()" onfocus="ffn()" onkeydown="kfn()"><input id="b1" type="submit" value="提交"><input id="b1" type="button" value="单击事件" onclick="fn1()"></form>  <br><br><br><table width="800px" border="1" cellspacing="0" align="center" onmouseover="over()" onmouseout="out()"><tr><th>学号</th><th>姓名</th><th>分数</th><th>评语</th></tr><tr align="center"><td>001</td><td>张三</td><td>90</td><td>很优秀</td></tr><tr align="center"><td>002</td><td>李四</td><td>92</td><td>优秀</td></tr></table></body><script>//onload : 页面/元素加载完成后触发function load(){console.log("页面加载完成...")}//onclick: 鼠标点击事件function fn1(){console.log("我被点击了...");}//onblur: 失去焦点事件function bfn(){console.log("失去焦点...");}//onfocus: 元素获得焦点function ffn(){console.log("获得焦点...");}//onkeydown: 某个键盘的键被按下function kfn(){console.log("键盘被按下了...");}//onmouseover: 鼠标移动到元素之上function over(){console.log("鼠标移入了...")}//onmouseout: 鼠标移出某元素function out(){console.log("鼠标移出了...")}//onsubmit: 提交表单事件function subfn(){alert("表单被提交了...");}</script>
</html>

  
  

案例分析

需求如下:
  1. 点击 “点亮”按钮 点亮灯泡,点击“熄灭”按钮 熄灭灯泡
  2. 输入框鼠标聚焦后,展示小写;鼠标离焦后,展示大写。
  3. 点击 “全选”按钮使所有的复选框呈现被选中的状态,点击 “反选”按钮使所有的复选框呈现取消勾选的状态。

效果如图所示:
在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>JS-事件-案例</title>
</head><body><img id="light" src="img/off.gif"> <br><input type="button" value="点亮" onclick="onlight()" ><input type="button" value="熄灭" onclick="offlight()"><br> <br><input type="text" id="name" value="ITCAST"  onblur="upper()" onfocus="lower()"><br> <br><input type="checkbox" name="hobby"> 电影<input type="checkbox" name="hobby"> 旅游<input type="checkbox" name="hobby"> 游戏<br><input type="button" value="全选" onclick="checkAll()"><input type="button" value="反选" onclick="reverse()">
</body><script>//onclick: 鼠标点击事件function onlight(){var img = document.getElementById('light');img.src = "img/on.gif";}function offlight(){var img = document.getElementById('light');img.src = "img/off.gif";}//onblur: 失去焦点事件function upper(){var inp = document.getElementById('name');inp.value = inp.value.toUpperCase();}//onfocus: 元素获得焦点function lower(){var inp = document.getElementById('name');inp.value = inp.value.toLowerCase();}function checkAll(){var ins = document.getElementsByName('hobby');for (let i = 0; i < ins.length; i++) {ins[i].checked=true;}}function reverse(){var ins = document.getElementsByName('hobby');for (let i = 0; i < ins.length; i++) {ins[i].checked=false;}}</script></html>

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

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

相关文章

修改单据转换规则后保存报错提示

文章目录 修改单据转换规则后保存报错提示 修改单据转换规则后保存报错提示

区块链与Solidity详细介绍及基本语法使用

一、区块链简介 区块链是一种分布式数据库技术&#xff0c;它以块的形式存储数据&#xff0c;并通过加密算法确保数据的安全性。每个块包含一系列交易&#xff0c;并通过哈希值与前一个块相连接&#xff0c;形成一个链式结构。这种结构使得数据难以被篡改&#xff0c;因为任何对…

2024.2.22 C++QT 作业

思维导图 练习题 1>完善对话框&#xff0c;点击登录对话框&#xff0c;如果账号和密码匹配&#xff0c;则弹出信息对话框&#xff0c;给出提示”登录成功“&#xff0c;提供一个Ok按钮&#xff0c;用户点击Ok后&#xff0c;关闭登录界面&#xff0c;跳转到其他界面。如果账…

线程池的基础使用和执行策略

什么是线程池 线程池&#xff0c;字面意思就是一个创建线程的池子&#xff0c;它的特点就是&#xff0c;在使用线程之前&#xff0c;就一次性把多个线程创建好&#xff0c;放到"池”当中。后面需要执行任务的时候&#xff0c;直接从"线程池"当中通过线程执行。…

通俗易懂分析:Vite和Webpack的区别

1、对项目构建的理解 先从浏览器出发&#xff0c; 浏览器是由浏览器内核和JS引擎组成&#xff1b;浏览器内核编译解析html代码和css代码&#xff0c;js引擎编译解析JavaScript代码&#xff1b;所以从本质上&#xff0c;浏览器只能识别运行JavaScript、CSS、HTML代码。 而我们在…

MATLAB环境下基于短时傅里叶变换和Rényi熵的脑电信号和语音信号分析

傅里叶变换是不能很好的反映信号在时域的某一个局部范围的频谱特点的&#xff0c;这一点很可惜。因为在许多实际工程中&#xff0c;人们对信号在局部区域的特征是比较关心的&#xff0c;这些特征包含着十分有用的信息。这类信号因为在时域(或者是空间域)上具有突变的非稳定性和…

Java基于SSM+JSP的超市进销库存管理系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

深入了解Git

1.1 Git 的工作流程简介 克隆 Git 资源作为工作目录 在克隆的资源上添加或修改文件 如果其他人修改了&#xff0c;你可以更新资源 在提交前查看修改 提交修改 在修改完成后&#xff0c;如果发现错误&#xff0c;可以撤回提交并再次修改并提交 1.2 Git 工作区、暂存区和版…

自存 angular material design 表单输入框lable右对齐样式

单个输入框的文字lable放输入框左边实现 material design 的组件库示例没有文字描述放左边的样式 ,所以mat-lable并没有放在mat-form-field中 <div class"input-container col-6"><mat-label>商品售价<span class"text-error">*</spa…

【springBoot】springAOP

AOP的概述 AOP是面向切面编程。切面就是指某一类特定的问题&#xff0c;所以AOP也可以理解为面向特定方法编程。AOP是一种思想&#xff0c;拦截器&#xff0c;统一数据返回和统一异常处理是AOP思想的一种实现。简单来说&#xff1a;AOP是一种思想&#xff0c;对某一类事务的集…

基于springboot+vue的中小型医院网站(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

TDesign Vue Next Starter中后台项目的生产环境部署与CSP内容安全策略、CORS跨源资源共享和服务后端开发

TDesign Vue Next Starter中后台项目的生产环境部署与CSP内容安全策略、CORS跨源资源共享和服务后端开发 目录 TDesign Vue Next Starter中后台项目的生产环境部署与CSP内容安全策略、CORS跨源资源共享和服务后端开发 一、TDesign Vue Next Starter中后台项目模板 1.1、项目…

Ubuntu20.04 查看系统版本号

目录 uname -auname -vlsb_release -acat /etc/issuecat /proc/version uname -a 查看系统发行版本号和操作系统版本 uname -v 查看版本号 lsb_release -a 查看发行版本信息 cat /etc/issue 查看系统版本 cat /proc/version 查看内核的版本号

vivado FSM Components

Vivado合成功能 •同步有限状态机&#xff08;FSM&#xff09;组件的特定推理能力。 •内置FSM编码策略&#xff0c;以适应您的优化目标。 •FSM提取默认启用。 •使用-fsm_extraction off可禁用fsm提取。 FSM描述 Vivado综合支持Moore和Mealy中的有限状态机&#xff08;…

ROX amine,Rhodamine X amine,可和羧酸等官能团反应

​您好&#xff0c;欢迎来到新研之家 文章关键词&#xff1a;Rhodamine X amine, ROX amine &#xff0c;Rhodamine X amine&#xff0c; ROX NH2&#xff0c;氨基ROX &#xff0c;ROX氨基&#xff0c;Rhodamine X氨基 一、基本信息 【产品简介】&#xff1a;ROX can also b…

C++的deque容器->基本概念、构造函数、赋值操作、大小操作、插入和删除、数据存取、排序

#include<iostream> using namespace std; #include <deque> //deque构造函数 void printDeque(const deque<int>& d) { for (deque<int>::const_iterator it d.begin(); it ! d.end(); it) { //*it 100; 容器中的数据不可以修…

DiceCTF 2024 -- pwn

baby-talk 题目给了 Dockerfile&#xff0c;但由于笔者 docker 环境存在问题启动不起来&#xff0c;所以这里用虚拟机环境做了&#xff08;没错&#xff0c;由于不知道远程 glibc 版本&#xff0c;所以笔者远程也没打通&#xff09;笔者本地环境为 glibc 2.31-0ubuntu9.9。然后…

开发技术-Java 获取集合中元素下标并移动至指定位置

1. 说明 某些业务需要特定的元素在列表的最后或者指定位置展示。 2. 代码 import lombok.AllArgsConstructor; import lombok.Data;import java.util.*; import java.util.stream.Collectors; import java.util.stream.IntStream;Data AllArgsConstructor class Student {St…

第七篇【传奇开心果系列】python的文本和语音相互转换库技术点案例示例:Sphinx自动电话系统(IVR)经典案例

传奇开心果博文系列 系列博文目录python的文本和语音相互转换库技术点案例示例系列 博文目录前言一、雏形示例代码二、扩展思路介绍三、Sphinx多语言支持示例代码四、Sphinx和语音合成库集成示例代码五、Sphinx语音识别前自然语言预处理示例代码六、Sphinx语音识别自动电话系统…

CSP-J 2023 T3 一元二次方程

文章目录 题目题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示 题目传送门题解思路总代码 提交结果尾声 题目 题目背景 众所周知&#xff0c;对一元二次方程 a x 2 b x c 0 , ( a ≠ 0 ) ax ^ 2 bx c 0, (a \neq 0) ax2bxc0,(a0)&#xff0c;可…