JavaWeb - 04 DOM与BOM相关操作

发布于:2022-12-24 ⋅ 阅读:(451) ⋅ 点赞:(0)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


1.浏览器API概述

  • API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应 用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机 制的细节。
  • Web API 是 Web 的应用程序编程接口。
  • 浏览器 API 可以扩展 Web 浏览器的功能。
  • 服务器 API 可以扩展 Web 服务器的功能。
  • 所有浏览器都有一组内置的 Web API 来支持复杂的操作,并帮助访问数据。

2.DOM(文档对象模型)

2.1 概述

  • 当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model)。
  • DOM 是一项 W3C (World Wide Web Consortium) 标准。
  • HTML DOM 是 HTML 的标准对象模型和编程接口。它定义了:
    • 作为对象的 HTML 元素
    • 所有 HTML 元素的属性
    • 访问所有 HTML 元素的方法
    • 所有 HTML 元素的事件
  • 换言之:HTML DOM 是关于如何获取、更改、添加或删除 HTML 元素的标准

在这里插入图片描述

2.2 节点的概念

  • DOM的最小组成单位叫做节点(node)。

  • 文档的树形结构(DOM树),就是由各种不同类型的节点组成。

  • 每个节点都可以看作是文档树的一片叶子。 最顶层的节点就是document节点,它代表了整个文档;是文档的根节点。

  • 每张网页都有自己的document节点,window.document属性就指向这个节点的。

  • 只要浏览器开始载入HTML文档,这个节点对象就存在了,可以直接调用。

  • 每一个HTML标签元素,在DOM树上都会转化成一个Element节点对象; 文档里面最高一层一般是HTML标签,其他HTML标签节点都是它的下级。

  • 节点的关系

    父节点关系(parentNode):直接的那个上级节点
    子节点关系(childNodes):直接的下级节点
    同级节点关系(sibling):拥有同一个父节点的节点
    

2.3 查找节点元素的几种方式

方法 描述
document.getElementById(id) 通过元素 id 来查找元素
document.getElementsByTagName(name) 通过标签名来查找元素
document.getElementsByClassName(name) 通过类名来查找元素
document.getElementsByName(nameAttribute) 通过标签的name属性获取
querySelector() 接受一个CSS选择器作为参数,返回匹配该选择器的元素节点;
querySelectorAll() 法与querySelector用法类似, 区别是返回一个类似数组的HTMLCollection对象,包含所有匹配给定选择器的节点。

代码演示

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>获取节点元素对象</title>

    </head>
    <body>
        <div class="poem">
            <p id="title1">静夜思</p>
            <p name="other">李白</p>
            <p>床前明月光,</p>
            <p>疑是地上霜。</p>
            <p>举头望明月,</p>
            <p>低头思故乡.</p>
        </div>
        <div class="poem">
            <p id="title2">静夜思</p>
            <p name="other">李白</p>
            <p>床前明月光,</p>
            <p>疑是地上霜。</p>
            <p>举头望明月,</p>
            <p>低头思故乡.</p>
        </div>
    </body>
    <script>
        // 1.id选择器
        var title1 = document.getElementById("title1");
        console.log(title1);
        var title2 = document.getElementById("title2");
        console.log(title2);

        // 2.class选择器
        var poem = document.getElementsByClassName("poem");
        console.log(poem);

        // 3.标签选择器
        var ps = document.getElementsByTagName("p");
        console.log(ps);

        // 4.name属性获取
        var others = document.getElementsByTagName("other");
        console.log(others);

        // 5.querySelector
        var div = document.querySelector("div");
        console.log(div);

        // 6.querySelectorAll
        var divs = document.querySelectorAll("div");
        console.log(divs);
    </script>
</html>

3.DOM 事件

3.1 概述

一种触发—响应 的机制; 用户的行为 + 浏览器感知(捕获)到用户的行为 + 事件处理程序。

JavaScript 能够在事件发生时执行,比如当用户点击某个 HTML 元素时。

事件的三要素

  • 事件源:(被)触发事件的元素
  • 事件类型:事件的触发方式(例如鼠标点击或键盘点击) 事件
  • 处理程序:事件触发后要执行的代码(函数形式)

3.2 事件绑定的三种方式

事件绑定,就是将每一种事件源通过某种触发方式来执行某段程序。其绑定方式有:

1.行内绑定 : 实际上就是在标签上指定一个事件类型属性,其事件值指向一段js函数。

<标签 on事件类型 = "处理函数名(参数列表)"></标签>
<script>
	function 处理函数名(参数列表){
        事件执行的程序;
    }
</script>

2.动态绑定 : 通过获取元素节点对象,调用对象的事件属性指向一段js匿名函数的方式。

// 1.获取元素节点对象,这里以通过id方式查找。(注意也可以用其它形式获取)
var 对象名 = document.getElementById("id名称");

// 2.绑定事件
对象名.on事件类型 = function(参数列表){
    事件执行的程序;
}

3.添加监听事件方式 : 每一个节点对象都提供了 addEventListener 方法,这个方法可以给选中的节点添加指定类型的事件 及事件处理程序。

// 1.获取元素节点对象,这里以通过id方式查找。(注意也可以用其它形式获取)
var 对象名 = document.getElementById("id名称");

// 2.绑定事件
对象名.addEventListener('事件类型',function(参数){
    事件执行的程序;
});

这里要注意的是,前两种绑定方式的事件类型前要加on,第三种不需要。

4.移除事件监听 :

对象名.removeEventListener("事件类型",事件执行函数);

注意: removeEventListener方法移除的监听函数, 必须与对应的addEventListener方法的参数完全一致, 而且必须在同一个元素节点,否则无效。

5.代码演示

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>事件绑定的三种方式</title>
    </head>
    <body>
        <button id="bt1" onclick="fun1()">行内绑定</button>
        <button id="bt2">动态绑定</button>
        <button id="bt3">添加事件监听绑定</button>

    </body>
    <script>
        // 1.行内绑定
        function fun1(){
            alert("行内绑定的方式");
        }

        // 2.动态绑定
        var bt2 = document.getElementById("bt2");
        bt2.onclick = function () {
            alert("动态绑定");
        }

        // 3.添加事件监听器
        var bt3 = document.getElementById("bt3");
        bt3.addEventListener("click",function () {
            alert("添加事件监听器方式绑定");
        })
    </script>
</html>

6.三种绑定方式的比较

  • 第一种 “HTML标签的on-属性”,违反了HTML与JavaScript代码相分离的原则;处理函数中 this 指向的 window对象;
  • 第二种 “Element节点的事件属性” 的缺点是,同一元素同一个事件只能定义一个监听函数,也就是说, 如果定义两次onclick属性,后一次定义会覆盖前一次。但是处理函数中的 this 指向的选中的对象;
  • 第三种:addEventListener方法可以针对同一个元素的同一个事件,添加多个监听处理函数。处理函数 中的 this 指向的也是选中的元素;

3.3 事件类型

页面加载事件

事件名称 何时触发
load 一个资源及其相关资源已完成加载。

焦点事件

事件名称 何时触发
focus 元素获得焦点
blur 元素失去焦点

鼠标事件

事件名称 何时触发
mouseenter 指针移到有事件监听的元素内
mouseover 指针移到有事件监听的元素或者它的子元素内
mousemove 指针在元素内移动时持续触发
mousedown 在元素上按下任意鼠标按钮
mouseup 在元素上释放任意鼠标按键
click 在元素上按下并释放任意鼠标按键
dblclick 在元素上双击鼠标按钮
contextmenu 右键点击 (右键菜单显示前)
mouseleave 指针移出元素范围外(不冒泡)
mouseout 指针移出元素,或者移到它的子元素上
select 文本被选中(input标签、textarea标签)
copy 元素内容被拷贝时

键盘事件

事件名称 何时触发
keydown 按下任意按键
keypress 除 Shift, Fn, CapsLock 外任意键被按住. (连续触发)
keyup 释放任意按键

form表单事件

事件名称 何时触发
reset 点击重置按钮时
submit 点击提交按钮

内容改变事件

change 当内容改变且失去焦点时触发 (存储事件)
input 当内容改变时触发 (值变化事件)

代码演示

<!--加载事件-->
<body onload="f1()" >
</body>
<script>
    function f1(){
        alert('f1');
    }
</script>

<!--焦点事件-->
<body>
    <input type="text" id="t" value="请输入用户名" onfocus="f1()" onblur="f2()">
</body>
<script>
    function f1(){
        document.getElementById('t').value = '';
    }
    function f2(){
        var v = document.getElementById('t').value;
        alert(v);
    }
</script>

<!--鼠标事件-->
<body>
    <div id="d" style="width:200px;height:200px;border:1px solid red">
        来啊
    </div>
</body>
<script>
    var d = document.getElementById('d');
    //当鼠标悬浮时触发
    d.onmouseover = function(){
        alert('mouseover');
    }
    //当鼠标离开时触发
    d.onmouseout = function(){
        alert('mouseout');
    }
    //当鼠标按下时触发
    d.onmousedown = function(){
        alert('mousedown');
    }
    //当鼠标弹起时触发
    d.onmouseup = function(){
        alert('mouseup');
    }
    //当鼠标移动时触发
    d.onmousemove = function(){
        alert('mousemove');
    }
</script>

<!--键盘事件-->
<body>
    <input type="text" value="" id="t">
</body>
<script>
    var d = document.getElementById('t');
    //当键盘按下时触发
    d.onkeydown = function(){
        console.log('keydown');
    }
    //当键盘按下时触发
    d.onkeypress = function(){
        console.log('keypress');
    }
    //当键盘弹起时触发
    d.onkeyup = function(){
        console.log('keyup');
    }
</script>

<!--键盘事件-->
<body>
    <form id="f" action="1.2.5.php">
        姓名:<input type="text" name="" value=""> <br>
        <input type="submit" name="" value="提交">
        <input type="reset" name="" value="重置">
    </form>
</body>
<script>
    var d = document.getElementById('f');
    //当表单提交时触发
    d.onsubmit = function(){
        alert('submit');
    }
    //当表单重置时触发
    d.onreset = function(){
        alert('reset');
    }
</script>

<!--内容改变事件-->
<body>
    <input type="text" id="t" value="">
</body>
<script>
    var d = document.getElementById('t');
    //当内容改变且失去焦点时触发
    d.onchange = function(){
        console.log('t');
    }
    //当内容改变时触发
    d.oninput = function(){
        console.log('in');
    }
</script>

3.4 事件传播

三个包裹着的DIV,都绑定了点击事件,问: 当点击 div1 时,会发生什么现象?

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>事件传播</title>
        <style>
            div {
                padding: 40px
            }

            #div3 {
                width: 300px;
                height: 300px;
                background-color: red
            }

            #div2 {
                width: 200px;
                height: 200px;
                background-color: yellow
            }

            #div1 {
                width: 100px;
                height: 100px;
                background-color: blue
            }
        </style>
    </head>
    <body>
        <div id="div3">3
            <div id="div2">2
                <div id="div1">1</div>
            </div>
        </div>
    </body>
    <script>
        var d1 = document.getElementById('div1');
        var d2 = document.getElementById('div2');
        var d3 = document.getElementById('div3');
        d1.onclick = function () {
            alert('1');
        }
        d2.onclick = function () {
            alert('2');
        }
        d3.onclick = function () {
            alert('3');
        }
    </script>
</html>

当点击div1时,触发 事件1,但是,紧跟着,事件2和事件3也被触发了; 这种现象,我们称为 事件冒泡

在JS中当一个事件发生以后,它会在不同的DOM节点之间传播。 这种传播分成三个阶段:

  • 第一阶段:从window对象传导到目标节点,称为 捕获阶段。
  • 第二阶段:在目标节点上触发,称为 目标阶段。
  • 第三阶段:从目标节点传导回window对象,称为 冒泡阶段。

事件传播的最上层对象是window;

事件的传播顺序,在捕获阶段依次为window、document、html、body、div;

在冒泡阶段依次为div、body、html、document、window。

想让事件监听在捕获阶段,只能通过 addEventListener 方法的进行设置:

在这里插入图片描述

4.对元素节的操作

4.1 元素节点相关的操作

方法 功能
document.createElement(“元素名称”) 用来生成网页元素节点,参数为元素的标签名;
document.createTextNode(“内容”) 用来生成文本节点,参数为所要生成的文本节点的内容;
appendChild() 接受一个节点对象作为参数,将其作为最后一个子节点,插入当前节点;
removeChild() 接受一个子节点作为参数,用于从当前节点移除该子节点
hashChildNodes() 返回一个布尔值,表示当前节点是否有子节点
cloneNode() 用于克隆一个选中的节点。 它接受一个布尔值作为参数,表示是否同时克隆子节点,默认是false,即不克隆子节点。 注意: 不会克隆绑定到该元素上的事件;

代码演示

<!--
    案例:给下拉选择框添加一个荆州选项
    将下拉选择框中的最后一个选项删除
    将下拉选择框中的最后一个选项修改为宜昌
-->
<html>
    <head>
        <meta charset="utf-8">
        <title>Element元素的增删改</title>
        <script>
            /**
             * 添加元素
             */
            function fn1(){
                //创建option元素节点
                var option = document.createElement("option");
                //创建文本节点
                var text = document.createTextNode("荆州");
                //将文本节点添加到元素节点中 <option>荆州</option>
                option.appendChild(text);
                //获取select元素节点
                var select = document.getElementsByTagName("select")[0];
                //将option添加到select中
                select.appendChild(option);
            }
            /**
             * 删除元素
             */
            function fn2(){
                //获取所有的option
                var options = document.getElementsByTagName("option");
                //获取最后一个option
                var option = options[options.length - 1];
                //获取select
                var select = document.getElementsByTagName("select")[0];
                //移除最后一个option
                select.removeChild(option);
            }
            /**
			 * 修改元素
			 */
            function fn3(){
                var selectEle = document.getElementsByTagName("select")[0];
                var optionEles = document.getElementsByTagName("option");
                var oldOptionEle = optionEles[1];
                var newOptionEle = document.createElement("option");
                newOptionEle.appendChild(document.createTextNode("宜昌"));
                selectEle.replaceChild(newOptionEle,oldOptionEle);
            }
        </script>
    </head>
    <body>
        <select>
            <option>孝感</option>
            <option>武汉</option>
            <option>襄阳</option>
        </select><br />
        <button onclick="fn1()">添加</button>
        <button onclick="fn2()">删除</button>
        <button onclick="fn3()">修改</button>
    </body>
</html>

4.2 属性相关操作

方法 描述
setAttribute(“属性名”,“属性值”) 为当前元素节点新增属性。如果同名属性已存在,就修改属性值。
getAttribute(“属性名”) 返回当前元素节点的指定属性。如果指定属性不存在,则返回null;
hasAttribute(“属性名”) 返回一个布尔值,表示当前元素节点是否包含指定属性
removeAttribute(“属性名”) 从当前元素节点移除属性。
style 设置CSS样式
value 获取值

代码演示

<!--
需求
给a标签设置href属性为"http://www.baidu.com"
获取a标签的href属性
移除a标签的href属性
设置a标签中的文本内容的样式:color = "blue"、fontsize="100px"、fontFamily = "楷体"
-->

<html>
    <head>
        <meta charset="utf-8">
        <title>Attribute属性的操作</title>
        <script>
            function fn1(){
                var a = document.getElementsByTagName("a")[0];
                a.setAttribute("href","http://www.baidu.com");
            }
            function fn2(){
                var a = document.getElementsByTagName("a")[0];
                var val = a.getAttribute("href");
                console.log(val);
            }
            function fn3(){
                var a = document.getElementsByTagName("a")[0];
                a.removeAttribute("href");
            }
            function fn4(){
                var a = document.getElementsByTagName("a")[0];
                a.style.color = "blue";
                a.style.fontSize = "100px";
                a.style.fontFamily = "楷体";
            }
        </script>
    </head>
    <body>
        <a >百度</a>
        <br />
        <button onclick="fn1()">设置属性</button>
        <button onclick="fn2()">获取属性</button>
        <button onclick="fn3()">移除属性</button>
        <button onclick="fn4()">设置样式</button>
    </body>
</html>

4.3 层级相关操作

方法 描述
nextElementSibling 返回紧跟在当前节点后面的第一个同级Element节点,如果当前节点后面没有同级节点,则返回null;
previousElementSibling 返回紧跟在当前节点前面的第一个同级Element节点,如果当前节点前面没有同级节点,则返回null;
parentElement 返回当前节点的父级Element节点;
childNodes 返回一个NodeList集合,成员包括当前节点的所有子节点(注意空格回车也算)。
firstChild 返回树中节点的第一个子节点,如果节点是无子节点,则返回 null。
lastChild 返回该节点的最后一个子节点,如果该节点没有子节点则返回 null 。

4.4 文本相关操作

方法 描述
innerText 添加文本内容,不解析标签
innerHTML 添加文本内容,解析标签

4.5 综合案例

案例:表格的增删操作

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>表格的增删操作</title>
        <style>
            div{
                width: 500px;
                height: 40px;
                margin: 0 auto;
            }
            input{
                border-radius: 5px;
            }
            table{
                width: 500px;
                margin: 0 auto;
                text-align: center;
            }
        </style>
    </head>
    <body>
        <!-- 添加框 -->
        <div>
            <input type="text" id="name">姓名
            <input type="text" id="age">年龄
            <button id="addbtn" onclick="addFun(this)">添加</button>
        </div>

        <!--展示表格-->
        <table id="table" border="1px" cellspacing="0" cellpadding="0">
            <tr>
                <th>姓名</th>
                <th>年龄</th>
                <th>操作</th>
            </tr>
            <tr>
                <td>张三丰</td>
                <td>11</td>
                <td>
                    <button id="delbtn" onclick="delFun(this)">删除</button>
                </td>
            </tr>
        </table>
    </body>
    <script>
        // 1.删除操作
        function delFun(obj) {
            // ①找到tr节点
            var trElement = obj.parentElement.parentElement;

            // ②找到table节点
            var tableElement = trElement.parentElement;

            // ③移除节点
            tableElement.removeChild(trElement);
        }

        // 2.添加操作
        function addFun(obj) {
            // 1.获取输入框内容
            var inputs = document.getElementsByTagName("input");
            var name = inputs[0].value;
            var age = inputs[1].value;

            // 2.创建节点
            // ① 创建内容节点
            var nameText = document.createTextNode(name);
            var ageText = document.createTextNode(age);

            // ②创建button节点
            var delText = document.createTextNode("删除");
            var buttonElement = document.createElement("button");
            buttonElement.setAttribute("onclick","delFun(this)");
            buttonElement.appendChild(delText);

            // ③创建td节点
            var tdElement1 = document.createElement("td");
            tdElement1.appendChild(nameText);
            var tdElement2 = document.createElement("td");
            tdElement2.appendChild(ageText);
            var tdElement3 = document.createElement("td");
            tdElement3.appendChild(buttonElement);

            // ④创建tr节点
            var trElement = document.createElement("tr");
            trElement.appendChild(tdElement1);
            trElement.appendChild(tdElement2);
            trElement.appendChild(tdElement3);

            // ⑤获取table对象
            var table = document.getElementById("table");
            table.appendChild(trElement);
        }
    </script>
</html>

第二种方案:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>表格的增删操作</title>
        <style>
            div{
                width: 500px;
                height: 40px;
                margin: 0 auto;
            }
            input{
                border-radius: 5px;
            }
            table{
                width: 500px;
                margin: 0 auto;
                text-align: center;
            }
        </style>
    </head>
    <body>
        <!-- 添加框 -->
        <div>
            <input type="text" id="name">姓名
            <input type="text" id="age">年龄
            <button id="addbtn" onclick="addFun(this)">添加</button>
        </div>

        <!--展示表格-->
        <table id="table" border="1px" cellspacing="0" cellpadding="0">

        </table>
    </body>
    <script>

        // 存储数据的容器
        var arr = [
            {name:"张三",age:11},
            {name:"李四",age:12},
            {name:"王五",age:13}
        ];
        showTable();
        // 显示操作
        function showTable() {
            // 表头
            var htmlStr ="<tr>"
            +"<th>姓名</th>"
            +"<th>年龄</th>"
            +"<th>操作</th>"
            +"</tr>";

            // 拼接内容
            for (var i = 0; i<arr.length;i++){
                htmlStr+="<tr>"
                    +"<td>"+arr[i].name+"</td>"
                    +"<td>"+arr[i].age+"</td>"
                    +"<td> <button id=\"delbtn\" οnclick=\"delFun(this)\">删除</button></td>"
                    +"</tr>";
            }
            // 将内容添加到表格中
            document.getElementById("table").innerHTML=htmlStr;
        }

        // 删除操作
        function delFun(obj) {
            // 找到当前元素的父元素tr
            var trElement = obj.parentElement.parentElement;
            console.log(trElement);
            // 找到第一个子元素td的内容
            var firstChildElement = trElement.firstChild;
            var name = firstChildElement.innerText;
            // 删除数组中的对象
            // 创建一个新的数组
            var newArr=[];
            for (var i = 0; i<arr.length;i++){
                if (arr[i].name != name){
                    newArr.push(arr[i]);
                }
            }
            arr=newArr;
            // 刷新页面
            showTable()
        }

        //添加操作
        function addFun(obj) {
            // 获取输入框内容
            var inputs = document.getElementsByTagName("input");
            var name = inputs[0].value;
            var age = inputs[1].value;

            // 向数组中添加元素
            arr.push({name:name,age:age});

            // 刷新页面
            showTable();
        }
    </script>
</html>

5.事件对象

事件的触发,大部分情况下是用户的一种行为,也就是说,我们并不能确定用户什么时间触发; 而且,由于事件的传播机制,我们甚至不能确定事件具体触发在哪个节点;这是一件很不爽的事情; 如何解决呢? 事件发生以后,系统会调用我们写好的事件处理程序 系统会在调用处理程序时,将事件发生时有关事件的一切信息,封装成一个对象, 作为参数传给监听函数(事件处理程序),我们把这个对象称为 事件对象。 有关事件发生的一切信息,都包含在这个事件对象中; 根据事件类型的不同,事件对象中包含的信息也有所不同; 如点击事件中,包含鼠标点击的横纵坐标位置,键盘事件中,包含键盘的键值等;

5.1 事件对象中的常用属性及方法

属性/方法 描述
event.bubbles 属性返回一个布尔值,表示当前事件是否会冒泡;
event.eventPhase 返回一个整数值,表示事件流在传播阶段的位置0:事件目前没有发生。 1:事件目前处于捕获阶段。 2:事件到达目标节点。 3:事件处于冒泡阶段。
event.type 返回一个字符串,表示事件类型,大小写敏感;
event.timeStamp 返回一个毫秒时间戳,表示事件发生的时间;
clientX、clientY 获取鼠标事件触发的坐标

5.2 阻止浏览器默认行为&阻止事件传播

属性/方法 描述
event.preventDefault() 方法取消浏览器对当前事件的默认行为, 比如点击链接后,浏览器跳转到指定页面,或者按一下空格键,页面向下滚动一段距离。
event.stopPropagation() 方法阻止事件在DOM中继续传播,防止再触发定义在别的节点上的监听函数

5.3 事件代理/委托

属性/方法 描述
event.target 对事件起源目标的引用,属性返回触发事件的那个节点。
event.currentTarget 属性返回事件当前所在的节点,即正在执行的监听函数所绑定的那个节点。 作为比较,target属性返回事件发生的节点。

5.4 案例

阻止链接跳转案例

<body>
    <!--第1种写法-->
    <a href="http://www.baidu.com" onclick="alert('哈哈'); return false;">百度</a>
    <!--第2种写法-->
    <script>
        function f1() {
            alert("嘎嘎");
            return false;
        }
    </script>
    <a href="http://www.baidu.com" onclick="return f1();">百度</a>
    <!--第3种写法-->
    <a href="http://www.baidu.com" id="ak">百度</a>
    <script>
        document.getElementById("ak").onclick=function () {
            alert("哈哈");
            return false;
        };
    </script>
</body>

点击小图显示大图

<body>
    <a id="ak" href="images/1.jpg"><img src="images/1-small.jpg" alt="" id="im"></a>
    <script>
        //点击小图片,显示大图---修改了这个图片标签的src的属性值
        //根据id获取小图,注册点击事件,添加事件处理函数
        document.getElementById("im").onclick=function () {
            //根据id获取超链接
            var aObj=document.getElementById("ak");
            this.src=aObj.href;
            //阻止超链接的默认跳转事件
            return false;
        };
    </script>

6.BOM(浏览器对象)

6.1 BOM概述

  • 浏览器对象模型(Browser Object Model (BOM))允许 JavaScript 与浏览器对话。
  • 不存在浏览器对象模型(BOM)的官方标准。
  • 现代的浏览器已经(几乎)实现了 JavaScript 交互相同的方法和属性,因此它经常作为 BOM 的方法和属性被提到。
  • 浏览器对象模型的具体实例化对象就是 window 对象;
  • window 对象下有很多属性和方法,我们前面学过的DOM对象,就是window对象的一个属性,只不过 这个属性的值又是一个对象,因此也成为window对象的子对象;

6.2 对话框

方法 描述
window.alert() 显示一个警告对话框,上面显示有指定的文本内容以及一个"确定"按钮。
window.prompt() 显示一个对话框,对话框中包含一条文字信息,用来提示用户输入文字.
window.confirm() 方法显示一个具有一个可选消息和两个按钮(确定和取消)的模态对话框 。

6.3 控制台

方法 描述
window.console 返回console对象的引用,该对象提供了对浏览器调试控制台的访问。
Console.clear() 清空控制台。
Console.error() 打印一条错误信息
Console.table() 将数组或对象数据在控制台以表格形式打印
Console.log() 打印字符串,使用方法比较类似C的printf、PHP的echo等格式输出

6.4 定时器

setTimeout()和clearTimeout(): 在指定的毫秒数到达之后执行指定的函数,只执行一次

// 语法格式
var timeout=setTimeout(function(){
    执行的语句;
},时间);

// 清除计时器
clearTimeout(timeout);

setInterval()和clearInterval() 定时调用的函数,可以按照给定的时间(单位毫秒)周期调用函数

// 格式
var interval = setInterval(function(){
    执行的语句;
},时间);

// 清除计时器
clearInterval(interval);

代码演示

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>计时器</title>
    </head>
    <body>
        <!--定时器-->
        <button onclick="getTimeOut()">5秒后弹出helloword弹框</button>
        
        <!--计时器-->
        <button onclick="getInterval()">开始计时</button>
        <div id="div" style="border: 1px solid black; color: red;width: 50px;height: 35px;text-align: center;font-size: 20px;padding-top: 15px">0</div>
    </body>
    <script>
        // 5秒后弹出helloword弹框
        function getTimeOut() {
            var timeout = window.setTimeout(function () {
                alert("HelloWord");
            },5000);
            // window.clearTimeout(timeout);
        }

        // 计时器
        function getInterval() {
            var i = 0;
            var intervals = window.setInterval(function () {
                i++;
                document.getElementById("div").innerText=i;
            },1000);
        }
    </script>
</html>

6.5 location对象

window.location 对象可用于获取当前页面地址(URL)并把浏览器重定向到新页面。属性方法如下:

  • window.location.href 返回当前页面的 href (URL)
  • window.location.hostname 返回 web 主机的域名
  • window.location.pathname 返回当前页面的路径或文件名
  • window.location.protocol 返回使用的 web 协议(http: 或 https:)
  • window.location.assign 加载新文档

6.6 history对象

  • window.history 对象包含浏览器历史。
  • window.history 对象可不带 window 书写。
  • 为了保护用户的隐私,JavaScript 访问此对象存在限制
    • history.back() - 等同于在浏览器点击后退按钮
    • history.forward() - 等同于在浏览器中点击前进按钮

6.7 navigator对象

  • window.navigator 对象包含有关访问者的信息。
  • window.navigator 对象可以不带 window 前缀来写。
  • 来自 navigator 对象的信息通常是误导性的,不应该用于检测浏览器版本,因为:
    • 不同浏览器能够使用相同名称
    • 导航数据可被浏览器拥有者更改
    • 某些浏览器会错误标识自身以绕过站点测试
    • 浏览器无法报告发布晚于浏览器的新操作系统
  • 常用的方法
    • navigator.appName
    • navigator.appCodeName
    • navigator.platform
本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到