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

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

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返回true
                if (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 () {
            //设置定时器,重复执行函数countDown
            var 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值