JavaScript对象之DOM和BOM

前言

        本文简单对JavaScript的BOM对象和DOM对象进行了介绍,以及其中相关方法和用法。


目录

一、DOM对象简单学习

二、事件

        2.1、事件简单学习

        2.2、事件监听机制

        案例:灯泡开关:

三、BOM对象

        3.1、BOM对象概念:

        3.2、组成

        案例:自动跳转首页

四、DOM对象简介

       4.1、基本概念:

       4.2、 W3C DOM 标准被分为 3 个不同的部分:

                4.2.1、核心 DOM - 针对任何结构化文档的标准模型

                4.2.2、XML DOM - 针对 XML 文档的标准模型

                4.2.3、HTML DOM - 针对 HTML 文档的标准模型

       案例:动态表格


一、DOM对象简单学习

  DOM对象的功能:控制HTML文档的内容
         
  获取页面标签(元素)对象:Element
        document.getElementById("id值"):通过元素的id获取元素对象
   如何操作Element对象:
            1. 修改属性值:
                1. 明确获取的对象是哪一个?
                2. 查看API文档,找其中有哪些属性可以设置
            2. 修改标签体内容:
                * 属性:innerHTML
                1. 获取元素对象
                2. 使用innerHTML属性修改标签体内容
            代码实例
        

        <!--
*@packageName 
*@className DOM简单学习
*@author wang
*@date 2022/2/10 13:55
*@Description 
-->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>DOM对象</title>
</head>


<img id="light" src="img/off.gif">
<h1 id="title">第一个标题</h1>
<script>
    /* 功能:控制html文档的内容
     * 获取页面标签(元素)对象:Element
     * document.getElementById("id值"):通过元素的id获取元素对象

     * 操作Element对象:
     1. 修改属性值:
     1. 明确获取的对象是哪一个?
     2. 查看API文档,找其中有哪些属性可以设置
     2. 修改标签体内容:
     * 属性:innerHTML
     1. 获取元素对象
     2. 使用innerHTML属性修改标签体内容
     */
    //
    // var s = document.getElementById("light");
    // // alert(s);
    // alert("点击确定更换图片");
    // s.src = "img/on.gif";

    var t = document.getElementById("title");
    alert("点击确定更换标题");
    t.innerHTML = "第二个标题";
</script>

</body>
</html>

以上内容是对DOM对象有一个简单的了解,以便更好的学习BOM对象,详细内容可以参考:

w3school 在线教程该网站

二、事件

        2.1、事件简单学习

 功能: 某些组件被执行了某些操作后,触发某些代码的执行。
 如何绑定事件
        1. 直接在html标签上,指定事件的属性(操作),属性值就是js代码
            1. 事件:onclick--- 单击事件
        2. 通过js获取元素对象,指定事件属性,设置一个函数
    代码实例
  

      <!--
*@packageName 
*@className 事件学习
*@author wang
*@date 2022/2/10 14:56
*@Description 
-->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>事件</title>
</head>
<body>

<!--方式一-->
<img id="light" src="img/on.gif" onclick="f();">
<!--//方式二-->
<img id="light2" src="img/on.gif">
<script>
    /*功能: 某些组件被执行了某些操作后,触发某些代码的执行。
    * 造句:  xxx被xxx,我就xxx
        * 我方水晶被摧毁后,我就责备对友。
        * 敌方水晶被摧毁后,我就夸奖自己。

* 如何绑定事件
    1. 直接在html标签上,指定事件的属性(操作),属性值就是js代码
        1. 事件:onclick--- 单击事件

    2. 通过js获取元素对象,指定事件属性,设置一个函数
*/
    function f() {
        alert("我被点了");
    }

    function f2() {
        alert("我被点了2");
    }

    //获取元素对象
    var light2 = document.getElementById("light2");
    //指定一个函数
    light2.onclick = f2;

</script>
</body>
</html>

        2.2、事件监听机制

 概念:某些组件被执行了某些操作后,触发某些代码的执行。
        * 事件:某些操作。如: 单击,双击,键盘按下了,鼠标移动了
        * 事件源:组件。如: 按钮 文本输入框...
        * 监听器:代码。
        * 注册监听:将事件,事件源,监听器结合在一起。 当事件源上发生了某个事件,则触发执行某个监听器代码。
     常见的事件:
        1. 点击事件:
            1. onclick:单击事件
            2. ondblclick:双击事件
        2. 焦点事件
            1. onblur:失去焦点
            2. onfocus:元素获得焦点。
        
        3. 加载事件:
            1. onload:一张页面或一幅图像完成加载。
        4. 鼠标事件:
            1. onmousedown    鼠标按钮被按下。
            2. onmouseup    鼠标按键被松开。
            3. onmousemove    鼠标被移动。
            4. onmouseover    鼠标移到某元素之上。
            5. onmouseout    鼠标从某元素移开。
        5. 键盘事件:
            1. onkeydown    某个键盘按键被按下。    
            2. onkeyup        某个键盘按键被松开。
            3. onkeypress    某个键盘按键被按下并松开。
        6. 选择和改变
            1. onchange    域的内容被改变。
            2. onselect    文本被选中。
        7. 表单事件:
            1. onsubmit    确认按钮被点击。
            2. onreset    重置按钮被点击。
        

案例:灯泡开关:

        图片资料


	<!--
*@packageName 
*@className 案例——灯泡开关
*@author wang
*@date 2022/2/10 15:13
*@Description 
-->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>灯泡开关</title>
</head>
<body>
<img id="light" src="img/off.gif">

<script>
    //获取img对象
    var light = document.getElementById("light");
    //指定单机事件
    light.onclick = fun;

    //定义一个标记,用于判断
    var flag = true;

    function fun() {

        if (flag) {
            //如果flag为true,说明灯没有打开,打开灯
            light.src = "img/on.gif";
            flag = false;
        } else {
            //如果灯打开了,则关闭灯
            light.src = "img/off.gif";
            flag = true;
        }
    }
</script>


</body>
</html>

三、BOM对象

        3.1、BOM对象概念:

    Browser Object Model 浏览器对象模型
    将浏览器的各个组成部分封装成对象。

       3.2、组成

1.* Window:窗口对象
    1. 创建
        直接使用,也可以用window.方法名
    2. 方法
        1. 与弹出框有关的方法:
            alert()    显示带有一段消息和一个确认按钮的警告框。
            confirm()    显示带有一段消息以及确认按钮和取消按钮的对话框。
                * 如果用户点击确定按钮,则方法返回true
                * 如果用户点击取消按钮,则方法返回false
            prompt()    显示可提示用户输入的对话框。
                * 返回值:获取用户输入的值
            代码演示
             

   <!--
*@packageName 
*@className BOM——window对象之弹出框
*@author wang
*@date 2022/2/10 15:54
*@Description 
-->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>window对象</title>
</head>
<body>

<script>
    /* 1. 与弹出框有关的方法:
            alert()    显示带有一段消息和一个确认按钮的警告框。
            confirm()    显示带有一段消息以及确认按钮和取消按钮的对话框。
                * 如果用户点击确定按钮,则方法返回true
                * 如果用户点击取消按钮,则方法返回false
            prompt()    显示可提示用户输入的对话框。
                * 返回值:获取用户输入的值*/

    // var flag = confirm("您确定要退出吗?");
    // if (flag) {
    //     alert("您已成功退出!");
    // }else {
    //     alert("欢迎继续使用!");
    // }


    var s = prompt("请输入用户名:");
    alert(s);

</script>
</body>
</html>

  

2.* Navigator:浏览器对象
3.* Screen:显示器屏幕对象

4.* History:历史记录对象
    1. 创建(获取):
        1. window.history
        2. history
    2. 方法:
        * back()    加载 history 列表中的前一个 URL。
        * forward()    加载 history 列表中的下一个 URL。
        * go(参数)    加载 history 列表中的某个具体页面。
            * 参数:
                * 正数:前进几个历史记录
                * 负数:后退几个历史记录
    3. 属性:
        * length    返回当前窗口历史列表中的 URL 数量。

 5.* Location:地址栏对象
    1. 创建(获取):
        1. window.location
        2. location
    2. 方法
        * reload()    重新加载当前文档。刷新
    3. 属性
        * href    设置或返回完整的 URL。

案例:自动跳转首页

<!--
*@packageName 
*@className 案例——自动跳转手也
*@author wang
*@date 2022/2/11 9:59
*@Description 
-->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>自动跳转首页</title>

    <style>
        p {
            text-align: center;
        }

        span {
            color: red;
        }
    </style>
</head>
<body>
<p>
    <span id="time">5</span>秒之后自动跳转到百度....
</p>

<script>

    //获取span标签对象
    var time = document.getElementById("time");

    var second = 5;

    //定义一个方法,用于减少秒数

    function setTime() {
        second--;

        //当读秒结束之后,跳转到百度网站
        if (second <= 0) {
            location.href = "https://www.baidu.com"
        }
        time.innerHTML = second + "";

    }

    //定义一个计时器,每一秒执行一次方法
    setInterval(setTime, 1000);


</script>
</body>
</html>

四、DOM对象简介

       4.1、基本概念:

Document Object Model 文档对象模型
    将标记语言文档的各个组成部分,封装为对象。可以使用这些对象,对标记语言文档进行CRUD的动态操作

HTML DOM 模型被结构化为对象树

对象的HTML DOM 树

 

通过这个对象模型,JavaScript 获得创建动态 HTML 的所有力量:

  • JavaScript 能改变页面中的所有 HTML 元素
  • JavaScript 能改变页面中的所有 HTML 属性
  • JavaScript 能改变页面中的所有 CSS 样式
  • JavaScript 能删除已有的 HTML 元素和属性
  • JavaScript 能添加新的 HTML 元素和属性
  • JavaScript 能对页面中所有已有的 HTML 事件作出反应
  • JavaScript 能在页面中创建新的 HTML 事件

        4.2、 W3C DOM 标准被分为 3 个不同的部分:

                4.2.1、核心 DOM - 针对任何结构化文档的标准模型

 1. * Document:文档对象
    1. 创建(获取):在html dom模型中可以使用window对象来获取
        1. window.document
        2. document
    2. 方法:
        1. 获取Element对象:
            1. getElementById()    : 根据id属性值获取元素对象。id属性值一般唯一
            2. getElementsByTagName():根据元素名称获取元素对象们。返回值是一个数组
            3. getElementsByClassName():根据Class属性值获取元素对象们。返回值是一个数组
            4. getElementsByName(): 根据name属性值获取元素对象们。返回值是一个数组
        2. 创建其他DOM对象:
            createAttribute(name)
            createComment()
            createElement()
            createTextNode()
   
    代码演示
    

    <!--
*@packageName 
*@className DOM——document对象
*@author wang
*@date 2022/2/11 16:30
*@Description 
-->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>document</title>
</head>
<body>
<div id="div1">div1</div>
<div id="div2">div2</div>
<div id="div3">div3</div>
<div class="cla1">cla1</div>
<div class="cla1">cla2</div>
<input type="text" name="username">

<hr>

<script>
    /* 方法:
            1. 获取Element对象:
                1. getElementById()    : 根据id属性值获取元素对象。id属性值一般唯一
                2. getElementsByTagName():根据元素名称获取元素对象们。返回值是一个数组
                3. getElementsByClassName():根据Class属性值获取元素对象们。返回值是一个数组
                4. getElementsByName(): 根据name属性值获取元素对象们。返回值是一个数组*/

    var divs = document.getElementsByTagName("div");
    for (var i = 0; i < divs.length; i++) {
        document.write(divs[i] + "<br>");
    }

    document.write("<hr>");
    var clas = document.getElementsByClassName("cla1");
    for (var i = 0; i < clas.length; i++) {
        document.write(clas[i] + "<br>");
    }
    document.write("<hr>");

    var usernames = document.getElementsByName("username");
    for (var i = 0; i < usernames.length; i++) {
        document.write(usernames[i] + "<br>");
    }
    document.write("<hr>");


</script>
</body>
</html>

2.* Element:元素对象
    1. 获取/创建:通过document来获取和创建
    2. 方法:
        1. removeAttribute():删除属性
        2. setAttribute():设置属性
    代码实例
     

   <!--
*@packageName 
*@className DOM——element元素对象
*@author wang
*@date 2022/2/11 16:49
*@Description 
-->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>element</title>
</head>
<body>
<a>点击跳转</a>
<input type="button" id="set" value="点击设置百度链接">
<input type="button" id="remove" value="点击移除链接">

<script>
    // Element:元素对象
    // 1. 获取/创建:通过document来获取和创建
    // 2. 方法:
    //         1. removeAttribute():删除属性
    var element = document.getElementsByTagName("a")[0];
    //获取移除按钮
    var removeB = document.getElementById("remove");
    removeB.onclick = function () {
        element.removeAttribute("href");

    }


    // 2. setAttribute():设置属性
    //获取设置按钮
    var setButton = document.getElementById("set");
    setButton.onclick = function () {

        element.setAttribute("href", "https://www.baidu.com");
    }

</script>
</body>
</html>

3.* Attribute:属性对象
4.* Text:文本对象
5.* Comment:注释对象

6.Node:节点对象,其他5个的父对象
    * 特点:所有dom对象都可以被认为是一个节点
    * 方法:
        * CRUD dom树:
            * appendChild():向节点的子节点列表的结尾添加新的子节点。
            * removeChild()    :删除(并返回)当前节点的指定子节点。
            * replaceChild():用新节点替换一个子节点。
    * 属性:
        * parentNode 返回节点的父节点。
    拓展
        超链接功能
               1.可以被点击,且拥有样式
                2.点击后跳转到href指定的URL
                目前我们的需求是保留1功能,去掉2功能,那么使用固定写法:javascript:void(0)

        代码演示

        

<!--
*@packageName 
*@className DOM——node对象
*@author wang
*@date 2022/2/15 12:13
*@Description 
-->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>node对象</title>
    <style>
        div {
            border: red solid 1px;
        }

        #div1 {
            width: 200px;
            height: 200px;
        }

        #div2 {
            width: 100px;
            height: 100px;
        }

        #div3 {
            width: 100px;
            height: 100px;
        }
    </style>
</head>
<body>


<div id="div1">div1
    <div id="div2">div2</div>
</div>

<!--<a href="" id="del">删除结点2</a>-->

<!--<input id="del" type="button" value="删除结点2">-->

<a href="javascript:void(0)" id="del">删除结点2</a>
<a href="javascript:void(0)" id="add">添加结点3</a>

<!--超链接功能
       1.可以被点击,且拥有样式
        2.点击后跳转到href指定的URL

        目前我们的需求是保留1功能,去掉2功能,那么使用固定写法:javascript:void(0)-->
<script>
    /*
    * Node:节点对象,其他5个的父对象
		* 特点:所有dom对象都可以被认为是一个节点
		* 方法:
			* CRUD dom树:
				* appendChild():向节点的子节点列表的结尾添加新的子节点。
				* removeChild()	:删除(并返回)当前节点的指定子节点。
				* replaceChild():用新节点替换一个子节点。
		* 属性:
                * parentNode 返回节点的父节点。*/
    //获取a标签
    var element_a = document.getElementById("del");

    //设置a标签的点击事件
    element_a.onclick = function () {
        //获取结点1和结点2,删除结点2
        var div1 = document.getElementById("div1");
        var div2 = document.getElementById("div2");
        div1.removeChild(div2);
    }


    //添加新节点
    //获取a标签
    var element_add = document.getElementById("add");

    //设置a标签的点击事件
    element_add.onclick = function () {
        //获取结点1,创建新节点3
        var div1 = document.getElementById("div1");

        //创建新节点
        var div3 = document.createElement("div");

        //设置div3的ID属性,为css选择器样式
        div3.setAttribute("id", "div3");

        div1.appendChild(div3);
    }

</script>
</body>
</html>

                4.2.2、XML DOM - 针对 XML 文档的标准模型

                4.2.3、HTML DOM - 针对 HTML 文档的标准模型

    1. 标签体的设置和获取:innerHTML
    2. 使用html元素对象的属性
    3. 控制元素样式
        1. 使用元素的style属性来设置
            如:
                 //修改样式方式1
                div1.style.border = "1px solid red";
                div1.style.width = "200px";
                //font-size--> fontSize
                div1.style.fontSize = "20px";
        2. 提前定义好类选择器的样式,通过元素的className属性来设置其class属性值。

        代码演示

        

<!--
*@packageName 
*@className 控制样式
*@author wang
*@date 2022/2/21 16:26
*@Description 
-->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>控制样式</title>
</head>
<style>
    .d1 {
        border: blue 10px solid;
        width: 50%;
    }

    .d2 {
        border: green 5px solid;
        width: 50%;
    }
</style>
<body>

<div id="div1">
    div1
</div>

<div id="div2">
    div2
</div>


<script>


    var div1 = document.getElementById("div1");
    div1.onclick = function () {
        //改变样式,可以通过元素的style属性
        div1.style.border = "2px solid red";
        div1.style.width = "20%";
    }

    var div2 = document.getElementById("div2");
    //也可以通过元素的className属性,这个需要提前用css设置好元素样式
    div2.onclick = function () {
        div2.className = "d2";
    }


</script>

</body>
</html>

案例:动态表格

        案例效果

可以添加,可以删除

        代码:

        

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>动态表格</title>

    <style>
        table {
            border: 1px solid;
            margin: auto;
            width: 500px;
        }

        td, th {
            text-align: center;
            border: 1px solid;
        }

        div {
            text-align: center;
            margin: 50px;
        }
    </style>

</head>
<body>

<div>
    <input type="text" id="id" placeholder="请输入编号">
    <input type="text" id="name" placeholder="请输入姓名">
    <input type="text" id="gender" placeholder="请输入性别">
    <input type="button" value="添加" id="btn_add">

</div>


<table>
    <caption>学生信息表</caption>
    <tr>
        <th>编号</th>
        <th>姓名</th>
        <th>性别</th>
        <th>操作</th>
    </tr>

    <tr>
        <td>1</td>
        <td>令狐冲</td>
        <td>男</td>
        <td><a href="javaScript:void(0);" onclick="delTr(this);">删除</a></td>
    </tr>

    <tr>
        <td>2</td>
        <td>任我行</td>
        <td>男</td>
        <td><a href="javaScript:void(0);" onclick="delTr(this);">删除</a></td>
    </tr>

    <tr>
        <td>3</td>
        <td>岳不群</td>
        <td>?</td>
        <td><a href="javaScript:void(0);" onclick="delTr(this);">删除</a></td>
    </tr>


</table>


<script>

    /*
    *   1.给添加按钮绑定单击事件
    *   2.获取文本框输入内容
    *   3.创建td,设置td的文本内容为文本框的内容
    *   4.创建tr,
    *   5.将td添加到tr当中
    *   6.获取table,将tr添加到table中
    *
    *   */



    //方法一:面向对象的方法
    /*document.getElementById("btn_add").onclick = function () {

        //2.获取文本框输入内容
        var id = document.getElementById("id").value;
        var name = document.getElementById("name").value;
        var gender = document.getElementById("gender").value;


        // 3.创建td,设置td的文本内容为文本框的内容
        var td_id = document.createElement("td");
        var text_id = document.createTextNode(id);
        td_id.appendChild(text_id);

        var td_name = document.createElement("td");
        var text_name = document.createTextNode(name);
        td_name.appendChild(text_name);


        var td_gender = document.createElement("td");
        var text_gender = document.createTextNode(gender);
        td_gender.appendChild(text_gender);

        //设置超链接的属性和文本
        var a_cre = document.createElement("a");
        a_cre.setAttribute("href", "javaScript:void(0);");
        a_cre.setAttribute("onclick", "delTr(this);");
        var td_a = document.createElement("td");
        var text_a = document.createTextNode("删除");
        a_cre.appendChild(text_a);
        td_a.appendChild(a_cre);

// 4.创建tr,
        // *   5.将td添加到tr当中
        var tr = document.createElement("tr");
        tr.appendChild(td_id);
        tr.appendChild(td_name);
        tr.appendChild(td_gender);
        tr.appendChild(td_a);


        //    6.获取table,将tr添加到table中
        var table = document.getElementsByTagName("table")[0];
        table.appendChild(tr);
    }
    */


    //方法二:innerHTML的方法

    document.getElementById("btn_add").onclick = function () {

        //2.获取文本框输入内容
        var id = document.getElementById("id").value;
        var name = document.getElementById("name").value;
        var gender = document.getElementById("gender").value;

        var table = document.getElementsByTagName("table")[0];

        table.innerHTML += "<tr>\n" +
            "        <td>" + id + "</td>\n" +
            "        <td>" + name + "</td>\n" +
            "        <td>" + gender + "</td>\n" +
            "        <td><a href=\"javaScript:void(0);\" onclick=\"delTr(this);\">删除</a></td>\n" +
            "    </tr>"


    }


    //删除的方法
    function delTr(obj) {
        //获取table结点,obj为超链接结点,超链接结点的父节点为td,td的父节点为tr,tr的父节点为table,因此
        //这里用超链接结点获取三次父节点就是table结点
        var table = obj.parentNode.parentNode.parentNode;
        //因为我们要删除的就是指定超链接的那一行数据,因此删除tr
        var tr = obj.parentNode.parentNode;


        //使用removeChild()方法删除我们找到的table结点的子节点
        table.removeChild(tr);
    }

</script>
</body>
</html>

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

空山新雨后~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值