一小时搞定JavaScript(2)——DOM与BOM的应用

前言,本篇文章是依据bilibili博主(波波酱老师)的学习笔记,波波酱老师讲的很好,很适合速成!!!
image-20240617155249414
本篇文章会与java进行对比学习,因为JS中很多语法和java是相同的,所以大家最好熟悉Java语言后再来进行学习,效果更佳,见效更快.

文章目录

  • 5.DOM和BOM
    • 5.1 DOM
      • 5.1.1传统元素获取
      • 5.1.2 CSS选择器获取元素(推荐使用)
    • 5.2 事件
      • 5.2.1事件的调用方式
      • 5.2.2 点击事件
      • 5.2.3 鼠标事件
      • 5.2.4 键盘事件
      • 5.2.4 焦点事件
      • 5.2.5 多事件注册
      • 5.2.6 事件参数e
      • 5.2.7 事件冒泡
      • 5.2.8 表单事件
    • 5.3 节点
      • 5.3.1 父节点
      • 5.3.2 子节点
      • 5.3.4 兄弟节点
      • 5.3.5 操作节点
        • 创建节点
        • 删除节点
    • 5.4 BOM
      • 5.4.1 **Window对象**
      • 5.4.2 对话框事件
      • 5.4.3 定时器
      • 5.4.4 document对象
      • 5.4.5 加载事件
      • 5.4.6 定位location

5.DOM和BOM

5.1 DOM

概念DOM就是文档树模型,全程为文档对象模型。

文档层级结构:

  • 文档:一个信息也没也可以称为文档
  • 节点:网页中的所有内容都是节点(标签、属性、文本、注释)
  • 元素:页面中的标签
  • 属性:标签中的属性

5.1.1传统元素获取

  1. 根据ID获取元素

    • document.getElementByID("ID名")
  2. 通过标签名获取元素

    document.getElementByTagName("标签名")

    for循环遍历输出
    image-20240618101634570

  3. 根据name获取元素

    • document.getElementsByName("name")
  4. 根据class获取元素

    • document.getElementsByClassName("class名称")[获取元素的个数]
  5. 指定后代获取元素

    • document.getElementsBy获取元素方式1().getElementsBy获取元素方式2())

      例如:
      document.getElementsByName("name").getElementsByID("ID名")
      

5.1.2 CSS选择器获取元素(推荐使用)

CSS选择器获取元素只需要记住两个语句就可以了,分别是document.querySelector()(单元素选择器)和document.querySelectorALL()(多元素选择器),然后在方法的括号中通过不同的标签名称来区分获取的是什么元素,具体如下:

  1. 通过ID选择器
    • document.querySelector("#ID名称")
  2. 通过标签选择器
    • document.querySelector("标签")
  3. 通过类选择器
    • document.querySelector(".class名称")
  4. 通过后代选择器
    • document.querySelector(获取元素方式1 获取元素方式2)(获取元素方式中间通过空格隔开)
  5. 子代选择器(通过>尖括号指向子代)
    • document.querySelector("获取元素方式1>获取元素方式2")
  6. 结构选择器(CSS3里面新特性)
    • documents.querySelector("获取元素方式1 获取元素方式2").innerHTML
      例如:image-20240618104503646

document.querySelector()(单元素选择器)和document.querySelectorALL()(多元素选择器)的区别:

单元素选择器只选择一个元素,而多元素选择器会选择多个元素。

格式上也有区别:

  • document.querySelector()
  • document.querySelectorALL()[指定的数量]

5.2 事件

5.2.1事件的调用方式

  1. 在script标签中调用

    含义就是在<script`>标签内部调用事件

    //语法----------
    var 对象名 = 获取Dom元素
    对象名.onclick = fuction()
    {~
    };
    //案例----------<script>window.onload = function(){var oBtn = document.getElementById("btn");oBtn.onclick = function(){alert("通过script标签调用")};}</script>
    
  2. 在元素中调用事件

    含义就是直接在html属性中调用事件

    //语法----------
    <script>function 调用函数名称(){alert("在元素中调用事件")}
    </script><body><标签名 onclick="调用函数名称()">~</标签名>
    </body>
    //案例----------
    <script>function diaoyong(){alert("在元素中调用事件")}
    </script><body><input id="btn" type="button" value="弹出" onclick="diaoyong()"/><!--onclick为事件属性-->
    </body>
    

5.2.2 点击事件

定义:原理是通过操作HTML属性的方式来实现给元素添加一个事件

语法:对象名.onclick = function(){~}

PS:是不能为一个元素添加多个事件处理器

5.2.3 鼠标事件

.onmouseover移入鼠标

.onmouseout移出鼠标

.onmousemove表示在元素移动一下就触发

image-20240618105010494

鼠标按下和松开事件:

通过onmousedown来实现按下鼠标事件,指的是鼠标按下一瞬间触发的事件

通过onmouseup来实现松开鼠标事件,指的是鼠标松开一瞬间触发的事件

5.2.4 键盘事件

通过onkeydown来实现键盘按下一瞬间触发的事件

通过onkeyup来实现键盘松开一瞬间触发的事件

<!--实现键盘输入字符串长度统计案例-->
<script>window.onload = function(){var otxt = document.getElementById("txt");var onum = document.getElementById("num");otxt.onkeyup =function(){var str = otxt.value;//获取文本框内容复制给变量onum.innerHTML = str.length;}}
</script>
<body><input type="text" id="txt"><div>字符串长度为:<span id="num">0</span></div>
</body>

5.2.4 焦点事件

.onfocus获取焦点

.onblur失去焦点

image-20240618105249956

5.2.5 多事件注册

.addEventListener()注册事件

.removeEventListener()解绑事件

通过addEventListener()来实现为一个元素添加事件

语法:对象名.addEventListener(type,fn,false);有三个参数,第一个参数就是事件类型,第二个就是函数fn,第三个参数就是false

image-20240618105526405

5.2.6 事件参数e

通过e参数来判断触发的是什么事件。

image-20240618105815118

5.2.7 事件冒泡

元素层叠在一块,点击一种元素,会触发到所有元素的情况就是事件冒泡。

image-20240618110047135

可以通过以下两种方法来取消冒泡:

  • window.enent.cancelBubble = true
  • e.stopPeopagation()

image-20240618110232472

5.2.8 表单事件

通过onfocus来实现获取焦点时触发的事件

通过onblur来实现失去焦点时触发的事件

  • PS:并不是所有的html元素都具有焦点事件,只有一下两种元素具备

    1. 表单元素(单选框\复选款\单行文本框\多行文本框\下拉列表)

    2. 超链接元素

<!--焦点搜索框案例-->
<script>window.onload = function(){var os = document.getElementById("s1");//获取焦点事件---------------------------os.onfocus = function(){if(this.value == "默认文本框显示内容"){this.value = "";}}//失去焦点事件---------------------------os.onblur = function(){if(this.value ==""){this.value = "默认文本框显示内容";}}}
</script>
<body><input id="s1" type="text" value="默认文本框显示内容"/><input id="b1" type="button" value="搜索按钮"/>
</body>

通过onselect来实现选中"单行文本框"或者"多行文本框"中的内容时触发的事件

<script>window.onload = function(){var os2 = document.getElementById("s2");var os3 = document.getElementById("s3");os2.onselect = function(){alert("你选中了单行文本框!");}os3.onselect = function(){alert("你选中了多行文本框!!!")}}
</script>
<body><input id="s2" type="text" value="这是一个单行文本框"/><br/><textarea id="s3" cols="20" rows="5">这是一个多行文本框&nbsp;这是一个多行文本框&nbsp;这是一个多行文本框&nbsp;这是一个多行文本框&nbsp;</textarea>
</body>

通过onchange来实现具有多个选项的表单元素

  • 单选框选择某一项内容时触发
  • 复选框选择某一项内容时触发
  • 下拉列表选择某一项时触发
<!--单选框选择某一项内容时触发事件的案例-->
<script>window.onload = function () {var oFruit = document.getElementsByName("f");var oP = document.getElementById("content");for (var i = 0; i < oFruit.length; i++) {oFruit[i].onchange = function () {if (this.checked) {oP.innerHTML = "你选择的是:" + this.value;}};}}
</script>
<body><div><label><input type="radio" name="f" value="第一个案例" />第一个案例</label><label><input type="radio" name="f" value="第二个案例" />第二个案例</label><label><input type="radio" name="f" value="第三个案例" />第三个案例</label></div><p id="content"></p>
</body>
<!--复选框选择某一项内容时触发事件的案例-->
<script>window.onload = function () {var oSelectAll = document.getElementById("selectAll");var oFruit = document.getElementsByName("fruit");oSelectAll.onchange = function () {//如果选中,即this.checked返回trueif (this.checked) {for (var i = 0; i < oFruit.length; i++) {oFruit[i].checked = true;}} else {for (var i = 0; i < oFruit.length; i++) {oFruit[i].checked = false;}}};}
</script>
<div><p><label><input id="selectAll" type="checkbox"/>全选/反选:</label></p><label><input type="checkbox" name="fruit" value="苹果" />苹果</label><label><input type="checkbox" name="fruit" value="香蕉" />香蕉</label><label><input type="checkbox" name="fruit" value="西瓜" />西瓜</label>
</div>
<!--下拉列表选择某一项时触发-->
<script>window.onload = function () {var oList = document.getElementById("list");oList.onchange = function () {var link = this.options[this.selectedIndex].value;window.open(link);};}
</script>
<body><select id="list"><option value="http://wwww.baidu.com">百度</option><option value="http://www.sina.com.cn">新浪</option><option value="http://www.qq.com">腾讯</option><option value="http://www.sohu.com">搜狐</option></select>
</body>

5.3 节点

节点包含:网页中的所有内容都是节点(标签、属性、文本、注释、回车、换行空格等)

节点的属性:

  • nodeType:节点带的类型
    • 1——标签
    • 2——属性
    • 3——文本
  • nodeName:节点的名字
    • 标签节点——大写的标签名字
    • 属性节点——小写的属性名字
    • 文本节点——#text
  • nodeValue
    • 节点的值——标签节点——null
    • 属性节点——属性值
    • 文本节点——文本内容

5.3.1 父节点

  • 获取父元素:.parentElement
  • 获取父节点:.parentNode

5.3.2 子节点

  • 获取子元素:.children
  • 获取子节点:.childrenNodes

获取节点的三种方法:

  1. 第一种方式就是通过子元素获取
  2. 第二种方式就是通过子节点获取(稍微比较麻烦)
  3. 第三种方式通过Class选择器获取

image-20240618111640693

5.3.4 兄弟节点

获取兄弟元素:

  • 首元素:firestElementsChild
  • 上一个元素:previousElementSibling
  • 下一个元素:nextElementSibling
  • 尾元素:lastElementChild

获取兄弟节点:

  • 首节点:firstChild
  • 上一节点:previousSibling
  • 下一节点:nextSibling
  • 尾节点:lastChild

image-20240618111852047

5.3.5 操作节点

创建节点

document.write("<标签>内容</标签>"):会使得页面中所有内容全部被覆盖掉。

image-20240618112616094

对象.innerHTML = "标签代码及其内容"

image-20240618112656372

createElement("标签")

使用新创建的标签:对象.appendChild(创建标签的对象名)

image-20240618112752858

删除节点

通过removeChild(创建标签的对象名)来进行删除创建的节点

image-20240618112855499

5.4 BOM

BOM是指浏览器对象模型,浏览器对象模型提供了独立于内容的、可以与浏览器窗口进行互动的对象结构。BOM由多个对象组成,其中代表浏览器窗口的window对象是BOM的顶层对象,其他对象都是该对象的子对象。

我们在浏览器中的一些操作都可以便用BOM的方式进行编程处理。比如:刷新浏览器、后退、前进、在浏览器中输入URL等。

5.4.1 Window对象

window对象无论是他的属性还是方法,都可以省略window前缀

打开窗口open(url,target);(target参数常用取值:“_self"和”_blank")

关闭窗口 close();

5.4.2 对话框事件

  1. alert("~")

    在alert()中实现换行用的是\n

  2. confirm("~")

    带有确认功能的对话框,会返回一个布尔值

  3. prompt("~")

    不仅返回提示文字,还返回一个字符串

5.4.3 定时器

  1. setTimeout()clearTimeout()

    用setTimeout()来一次性调用函数,并且可以使用clearTimeout()来取消执行setTimeout()

    语法:setTimeout(code,time);

    • 参数code可以是执行的代码
    • 参数time表示多长事件执行一次code
  2. setInterva()clearInterval()

    此类方法可以重复多次使用计时器

    案例一:

image-20240618113803036

案例二:

<!--通过setInterva()来实现倒计时案例--><script>//定义全局变量,用于记录秒数var n = 5;window.onload = function () {//设置定时器,重复执行函数countDownvar t = setInterval(countDown, 1000);//设置清楚定时器,实现倒计时停止功能var obt = document.getElementById("btn");obt.onclick = function(){clearInterval(t);}            }//定义函数function countDown() {//判断n是否大于0,因为倒计时不可能有负数if (n > 0) {n--;document.getElementById("num").innerHTML = n;}}</script><body><p>倒计时:<span id="num">5</span></p><input id="btn" type="button" value -"停止"/>
</body>

5.4.4 document对象

定义:用来操作HTML文档里所有的内容

  • Window对象是浏览器为每个窗口创建的一个对象,这些都被称作"BOM(浏览器对象模型)"
  • Document对象是浏览器为美观窗口内的HTML页面创建一个对象,这些称为"DOM(文档对象模型)"
  • BOM包含于DOM

document对象属性:

序号document对象属性说明
1document.title获取文档的title
2document.body获取文档的body
3document.forms获取所有form元素
4document.images获取所有img元素
5document.links获取所有a元素
6document.cookie获取文档的cookie
7document.URL获取当前页面的地址
8document.referrer获取用户在访问当前页面之前所在页面的地址 ???$$$

PS;

  • 以上3.4.5.等价于 getElementByTagName("form|img|a")

  • 7.等价于window.location.href

document对象方法:

document对象方法说明
document.getElementById()通过 id 获取元素
document.getElementByTagName()通过标签名获取元素
document.getElementClassName()通过 class 获取元素
document.getElementByName()通过 name 获取元素
document.querySelector()通过选择器获取1个元素
document.querySelectorAll()通过选择器获取所有元素
document.createElement()创建元素节点
document.createTextNode()创建文本节点
document.wirte()输出内容
document.writeln()输出内容并换行

PS:

  • document.wirte(“~”),当中,不仅可以输出文本内容,还可以输出元素
  • writeln()方法与wirte()方法类似,区别在于:writeln()方法会输出内容后面多加一个换行符\n

5.4.5 加载事件

image-20240618113948009

5.4.6 定位location

定义:可以用来操作当前窗口的URL

  1. window.location,href输出当前页面的地址
  2. location.search获取或设置当前页面地址"?"后面的内容
  3. location.hash获取当前页面地址"#"后面的内容

以下是location对象的一些关键字,大家了解即可:

image-20240618114042979

location.href = "网址"设置跳转页面(这个属性会用的比较多一点)

image-20240618114057262

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

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

相关文章

高考志愿填报,是选好专业,还是选好学校?过来人给你说说

分数限制下&#xff0c;选好专业还是选好学校&#xff1f; 到底是先选专业还是先选学校&#xff0c;是让考生及家长一直拿不准、辨不清的问题&#xff0c;是优先考虑学校还是专业&#xff0c;上了好学校&#xff0c;专业不喜欢就业前景不理想&#xff0c;怎么办&#xff1f;为…

【未来已来】AI大模型革命:向量数据库如何重塑智能世界?

在人工智能的浪潮中,向量数据库正成为推动AI大模型发展的幕后英雄。这不是简单的技术升级,而是一场关于智能未来的革命。本文将带您深入了解向量数据库如何成为AI大模型的核心竞争力,以及它如何助力我们在智能化的道路上加速前进。 向量数据库:AI大模型的心脏 想象一下…

vue echarts画多柱状图+多折线图

<!--多柱状图折线图--> <div class"echarts-box" id"multiBarPlusLine"></div>import * as echarts from echarts;mounted() {this.getMultiBarPlusLine() },getMultiBarPlusLine() {const container document.getElementById(multiBar…

图书管理系统代码(Java)

1、运行演示 QQ2024528-205028-HD 详细讲解在这篇博客&#xff1a;JavaSE&#xff1a;图书管理系统-CSDN博客 2、所建的包 3、Java代码 3.1 book包 3.1.1 Book类代码 package book;/*** Created with IntelliJ IDEA.* Description:* User: dings* Date: 2024-05-13* Time:…

押注“人类终极能源”!OpenAI与核聚变公司Helion Energy洽谈“购买大量”聚变能源

内容提要 在当下&#xff0c;由 AI 引发的新一轮能源危机已经不再是一个小概率的“黑天鹅”事件&#xff0c;而是一头正在向我们猛冲而来的“灰犀牛”。 文章正文 Helion Energy&#xff0c;是一家总部位于美国华盛顿州埃弗雷特的能源创业公司。 这家成立于 2013 年的公司在…

安卓实现圆形按钮轮廓以及解决无法更改按钮颜色的问题

1.实现按钮轮廓 在drawable文件新建xml文件 <shape xmlns:android"http://schemas.android.com/apk/res/android"<!--实现圆形-->android:shape"oval"><!--指定内部的填充色--><solid android:color"#FFFFFF"/><!-…

【挑战100天首通《谷粒商城》】-【第一天】06、环境-使用vagrant快速创建linux虚拟机

文章目录 课程介绍1、安装 linux 虚拟机2、安装 VirtualBoxStage 1&#xff1a;开启CPU虚拟化Stage 2&#xff1a;下载 VirtualBoxStage 2&#xff1a;安装 VirtualBoxStage 4&#xff1a;安装 VagrantStage 4-1&#xff1a;Vagrant 下载Stage 4-2&#xff1a;Vagrant 安装Stag…

CentOS 7.9上创建JBOD(一)

系列文章目录 CentOS 7.9上创建的JBOD阵列恢复&#xff08;二&#xff09; CentOS 7.9检测硬盘坏区、实物定位&#xff08;三&#xff09; 文章目录 系列文章目录前言一、安装 mdadm工具二、创建JBOD设备三、为JBOD扩容&#xff08;增加一个硬盘&#xff09;四、最后&#xff…

MySQL修改用户权限(宝塔)

在我们安装好的MySQL中&#xff0c;很可能对应某些操作时&#xff0c;不具备操作的权限&#xff0c;如下是解决这些问题的方法 我以宝塔创建数据库为例&#xff0c;创建完成后&#xff0c;以创建的用户名和密码登录 这里宝塔中容易发生问题的地方&#xff0c;登录不上去&#…

STM32单片机-通信协议(下)

STM32单片机-通信协议(下&#xff09; 一、通信协议介绍二、USART(通用同步/异步收发器)2.1 USART框图和基本结构2.2 串口发送2.2.1 Printf函数移植2.2.2 串口发送汉字 2.3 串口接收2.3.1 串口接收查询2.3.2 串口接收中断 2.4 USART串口数据包2.4.1 数据包格式2.4.2 数据包接收…

企业数字化转型好帮手蚓链,超多创新亮点等你来!

家人们&#xff0c;今天必须给大家分享一下蚓链这个超棒的数字化转型好帮手呀&#xff01; 在理念创新上&#xff0c;它做到了以用户为中心&#xff0c;给大家带来精准化、个性化的营销体验呢。 组织创新也超厉害&#xff0c;搭建了开放式创新平台&#xff0c;吸引外部合作伙伴…

gitlab2024最新版安装

系统&#xff1a;redhat9.0 gitlab版本&#xff1a;gitlab-ce-16.10.7-ce.0.el9.x86_64.rpm 安装组件&包依赖&#xff1a;https://packages.gitlab.com/gitlab/gitlab-ce/packages/ol/9/gitlab-ce-16.10.7-ce.0.el9.x86_64.rpm 参考&#xff1a; 前提&#xff1a; 下载gitl…

石英砂酸洗提纯方法和工艺

石英砂酸洗提纯方法和工艺是石英砂加工中至关重要的一个环节&#xff0c;其目的是通过化学手段去除石英砂中的杂质&#xff0c;提升其纯度。以下将详细介绍石英砂酸洗提纯的方法和工艺&#xff0c;以便更好地理解和应用这一技术。 一、概述 石英砂酸洗提纯主要是利用酸液对石英…

MySQL----表级锁行级锁排它锁和共享锁意向锁

MySQL的锁机制 锁&#xff08;Locking&#xff09;是数据库在并发访问时保证数据一致性和完整性的主要机制。在 MySQL 中&#xff0c;不同存储引擎使用不同的加锁方式&#xff1b;我们以 InnoDB 存储引擎为例介绍 MySQL 中的锁机制&#xff0c;其他存储引擎中的锁相对简单一些…

重大利好!亚马逊推出新功能,跨境商家销量或将迎来大爆发

亚马逊美亚站近日推出的一个新功能——帖子曝光。 顾名思义&#xff0c;帖子曝光这个功能可以提高卖家发布帖子的曝光度&#xff0c;吸引潜在用户&#xff0c;从而提升品牌影响力和产品销量。 亚马逊介绍&#xff0c;帖子曝光功能主要通过将品牌卖家的图文或视频帖子【一键】…

Nginx + KeepAlived高可用负载均衡集群

目录 一、Keepealived脑裂现象 1.现象 2.原因 3.解决 4.预防 二、实验部署 1.两台nginx做初始化操作并安装nginx 2.四层反向代理配置 3.配置高可用 4.准备检查nginx运行状态脚本 5.开启keepalived服务并测试 一、Keepealived脑裂现象 1.现象 主服务器和备服务器都同…

表面声波滤波器——叉指换能器(3)

叉指换能器(interdigital transducers&#xff0c;IDT) 是在压电基片表面激励和检测声表面波&#xff0c;从而实现电信号和声信号间的相互转换。 叉指换能器由在压电基片表面上沉积两组互相交错&#xff0c;周期分布的状金属条带(叉指电极)组成&#xff0c;每组电极和一个汇流…

【尚庭公寓SpringBoot + Vue 项目实战】后台岗位管理(十六)

【尚庭公寓SpringBoot Vue 项目实战】后台岗位管理&#xff08;十六&#xff09; 文章目录 【尚庭公寓SpringBoot Vue 项目实战】后台岗位管理&#xff08;十六&#xff09;1、业务说明2、逻辑模型介绍3、接口开发3.1、分页查询岗位信息3.2、保存或更新岗位信息3.3、根据ID删…

Unity2D游戏制作入门 | 14( 之人物实装攻击判定 )

上期链接&#xff1a;Unity2D游戏制作入门 | 13 ( 之人物三段攻击 )-CSDN博客 上期我们聊到给人物添加三段攻击的动画&#xff0c;通过建立新的图层动画当我们按下攻击按键就会自动切换进攻击的动画&#xff0c;如果我们连续按下攻击键&#xff0c;我们还可以进行好几段的攻击…

S32K3通过S32DS实现:S32K3如何将FLASH驱动放到RAM里面、RAM如何实现软件复位数据不丢失操作。

目录 1、概述 2、默认flash存放位置展示 3、通过默认的链接文件将flash放置到RAM 4、通过修改启动与链接文件将flash放在RAM 5、RAM热复位数据不丢失 1、概述 在通过RTD的SDK也好MCAL也好,始终存在一个问题,生成的代码除了看门狗模块,默认都是放在flash里面,按照正常逻…