zoukankan      html  css  js  c++  java
  • 05 javascript知识点---BOM和DOM

    1.DOM简单学习(为了满足案例要求)

    功能:控制html文档的内容
    获取页面标签(元素)对象:Element
      document.getElementById("id值"):通过元素的id获取元素对象

    操作Element对象:
      1. 修改属性值:
        1. 明确获取的对象是哪一个?
        2. 查看API文档,找其中有哪些属性可以设置
      2. 修改标签体内容:
        * 属性:innerHTML
        1. 获取元素对象
        2. 使用innerHTML属性修改标签体内容

    2.事件简单学习
    功能: 某些组件被执行了某些操作后,触发某些代码的执行。
     如何绑定事件

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

      2. 通过js获取元素对象,指定事件属性,设置一个函数(掌握)

    案例:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>电灯开关</title>
    </head>
    <body>
        <img src="img/off.gif" id="light">
        <script>
            var light=document.getElementById("light");
            var flag=false;
            light.onclick=fun;
            function fun() {
                if(!flag){
                    light.src="img/on.gif";
                    flag=true;
                }else {
                    light.src="img/off.gif";
                    flag=false;
                }
    
            }
    
    
        </script>
    </body>
    </html>

    3.BOM:
    (1)概念:Browser Object Model 浏览器对象模型
    * 将浏览器的各个组成部分封装成对象。

    (2)组成:
      * Window:窗口对象
      * Navigator:浏览器对象(基本不用)
      * Screen:显示器屏幕对象(基本不用)
      * History:历史记录对象
      * Location:地址栏对象

    (3)Window:窗口对象
      1. 创建
      2. 方法
        1. 与弹出框有关的方法:
          <1>alert() 显示带有一段消息和一个确认按钮的警告框。
          <2>confirm() 显示带有一段消息以及确认按钮和取消按钮的对话框。
            * 如果用户点击确定按钮,则方法返回true
            * 如果用户点击取消按钮,则方法返回false
        2. 与打开关闭有关的方法:
          close() 关闭浏览器窗口。
           谁调用我 ,我关谁
          open() 打开一个新的浏览器窗口
          * 返回新的Window对象
        3. 与定时器有关的方式
          setTimeout() 在指定的毫秒数后调用函数或计算表达式。
          * 参数:
          1. js代码或者方法对象
          2. 毫秒值
          * 返回值:唯一标识,用于取消定时器
          clearTimeout() 取消由 setTimeout() 方法设置的 timeout。

          setInterval() 按照指定的周期(以毫秒计)来调用函数或计算表达式。
          clearInterval() 取消由 setInterval() 设置的 timeout。

    案例:轮播图

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>轮播图</title>
    
    </head>
    <body>
        <img src="img/banner_1.jpg" width="100%" id="img_banner">
        <script>
            var number=1;
            function changepic() {
                if(number<4){
                    var img=document.getElementById("img_banner");
                    img.src="img/banner_"+number+".jpg";
                    number++;
                }else {
                    number=1;
                }
            }
            setInterval(changepic,2000); //注意:参数1为函数名,不能加()
        </script>
    </body>
    </html>

    (4) Location:地址栏对象
      1. 创建(获取):
        1. window.location
        2. location

      2. 方法:
        * reload() 重新加载当前文档。刷新
      3. 属性
        * href 设置或返回完整的 URL

    案例:自动跳转回首页

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>自动跳转首页</title>
        <style>
            span{
                color: red;
            }
            p{
                text-align: center;
            }
        </style>
        <script>
            var number=5;
            function timeshow() {
                if(number>0){
                    number--;
                    var span_number=document.getElementById("span_number"); //获取span标签
                    span_number.innerHTML=number+"";
                }else {
                    //跳转到首页
                    location.href="https://hao.360.com/?a1004"
                }
            }
            setInterval(timeshow,1000);
        </script>
    </head>
    <body>
        <p><span id="span_number">5</span>秒后,自动跳转到首页</p>
    </body>
    </html>

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

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

      * 核心 DOM - 针对任何结构化文档的标准模型
        (1)Document:文档对象(掌握)
        (2)Element:元素对象(掌握)
        (3)Attribute:属性对象
        (4)Text:文本对象
        (5) Comment:注释对象

        (6) Node:节点对象,其他5个的父对象
      * XML DOM - 针对 XML 文档的标准模型
      * HTML DOM - 针对 HTML 文档的标准模型

    * 核心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()
          3. 属性
            * Element:元素对象
            1. 获取/创建:通过document来获取和创建
            2. 方法:
              1. removeAttribute():删除属性
              2. setAttribute():设置属性
      (2)Node:节点对象,其他5个的父对象
        * 特点:所有dom对象都可以被认为是一个节点
        * 方法:
        * CRUD dom树:
          * appendChild():向节点的子节点列表的结尾添加新的子节点。
          * removeChild() :删除(并返回)当前节点的指定子节点。
          * replaceChild():用新节点替换一个子节点。
          * 属性:
          * parentNode 返回节点的父节点。

    案例:动态表格

    <!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 id="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.获取按钮
        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.getElementById("table");
            table.innerHTML+="<tr>
    " +
                "        <td>"+id+"</td>
    " +
                "        <td>"+name+"</td>
    " +
                "        <td>"+gender+"</td>
    " +
                "        <td><a href="javascript:void(0);" onclick="delTr(this)">删除</a></td>
    " +
                "    </tr>"
    
            //方法二
            // //3.创建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 td_delete = document.createElement("td");
            // var del_a = document.createElement("a");
            // del_a.setAttribute("href","javascript:void(0);");
            // del_a.setAttribute("onclick","delTr(this)");
            // var text_a = document.createTextNode("删除");
            // del_a.appendChild(text_a);
            // td_delete.appendChild(del_a);
            //
            // //4.将td添加到tr上
            // var tr = document.createElement("tr");
            // tr.appendChild(td_id);
            // tr.appendChild(td_name);
            // tr.appendChild(td_gender);
            // tr.appendChild(td_delete);
            // var table =document.getElementById("table");
            // table.appendChild(tr);
    
    
    
        };
    
        //删除tr
        function delTr(obj) {
            //获取父节点
            var table = obj.parentNode.parentNode.parentElement;
            var tr = obj.parentNode.parentNode;
            table.removeChild(tr);
        }
    </script>
    </body>
    </html>


    HTML DOM
      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属性值。

    5.事件监听机制:
    概念:某些组件被执行了某些操作后,触发某些代码的执行
    事件:某些操作。如: 单击,双击,键盘按下了,鼠标移动了
    事件源:组件。如: 按钮 文本输入框...
    监听器:代码。
    注册监听:将事件,事件源,监听器结合在一起。 当事件源上发生了某个事件,则触发执行某个监听器代码。


    * 常见的事件:
      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 重置按钮被点击。

    案例:表格全选

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>表格全选</title>
        <style>
            table{
                border: 1px solid;
                width: 500px;
                margin-left: 30%;
            }
    
            td,th{
                text-align: center;
                border: 1px solid;
            }
            div{
                margin-top: 10px;
                margin-left: 30%;
            }
    
            .over{
                background-color: pink;
            }
    
            .out{
                background-color: white;
            }
        </style>
    
        <script>
            window.onload=function () {
                //全选
                document.getElementById("selectAll").onclick=function () {
                    //获取所有的checkbox
                    var cbs = document.getElementsByName("cb");
                    for (var i = 0; i <cbs.length ; i++) {
                        cbs[i].checked=true;
                    }
                };
    
                //全不选
                document.getElementById("unSelectAll").onclick=function () {
                    //获取所有的checkbox
                    var cbs = document.getElementsByName("cb");
                    for (var i = 0; i <cbs.length ; i++) {
                        cbs[i].checked=false;
                    }
                };
    
                //反选
                document.getElementById("selectRev").onclick=function () {
                    //获取所有的checkbox
                    var cbs = document.getElementsByName("cb");
                    for (var i = 0; i <cbs.length ; i++) {
                        cbs[i].checked=!(cbs[i].checked);
                    }
                };
    
                //给所有tr绑定鼠标移动事件
                var trs =document.getElementsByTagName("tr");
                for (var i = 0; i <trs.length ; i++) {
                    trs[i].onmouseover=function () {
                        this.className="over";
                    };
    
                    trs[i].onmouseout=function () {
                        this.className="out";
                    }
                }
                
            }
        </script>
    
    
    </head>
    <body>
    
    <table>
        <caption>学生信息表</caption>
        <tr>
            <th><input type="checkbox" name="cb"></th>
            <th>编号</th>
            <th>姓名</th>
            <th>性别</th>
            <th>操作</th>
        </tr>
    
        <tr>
            <td><input type="checkbox" name="cb"></td>
            <td>1</td>
            <td>令狐冲</td>
            <td></td>
            <td><a href="javascript:void(0);">删除</a></td>
        </tr>
    
        <tr>
            <td><input type="checkbox" name="cb"></td>
            <td>2</td>
            <td>任我行</td>
            <td></td>
            <td><a href="javascript:void(0);">删除</a></td>
        </tr>
    
        <tr>
            <td><input type="checkbox" name="cb"></td>
            <td>3</td>
            <td>岳不群</td>
            <td>?</td>
            <td><a href="javascript:void(0);">删除</a></td>
        </tr>
    
    </table>
    <div>
        <input type="button" id="selectAll" value="全选">
        <input type="button" id="unSelectAll" value="全不选">
        <input type="button" id="selectRev" value="反选">
    </div>
    </body>
    </html>

    效果图:

  • 相关阅读:
    [PHP] websocket协议的生成
    [Linux] 解决virtualbox共享文件夹没有访问权限的问题
    [Linux] VirtualBox的ubuntu系统与宿主机共享目录
    [PHP] 框架中.env文件的加载过程
    [PHP] PHP7已经删除了preg_replace的e修饰符
    [日常]解决Connection to `ssl://pecl.php.net:443' failed
    [日常]k8s的前世今生
    [Linux] 利用tcpdump和strace进行debug
    [Go] 使用读写锁对map资源进行安全处理
    [Linux] 使用awk比较两个文件的内容
  • 原文地址:https://www.cnblogs.com/luckyplj/p/11206006.html
Copyright © 2011-2022 走看看