DOM的基础学习

30 篇文章 0 订阅
9 篇文章 0 订阅

DOM的基础学习

概念

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

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

  • Core DOM - 所有文档类型的标准模型
    • Document:文档对象
    • Element:元素对象
    • Attribute:属性对象
    • Text:文本对象
    • Comment:注释对象
    • Node:结点对象,其他5个的父对象
  • XML DOM - XML 文档的标准模型
  • HTML DOM - HTML 文档的标准模型

Core DOM 模型

  • Document:文档对象
    1. 创建(获取):在HTML dom模型中可以使用window对象来获取
      1. window.document
      2. document
    2. 方法:
      1. 获取Element对象:
        1. getElementById() 查找具有指定的唯一 ID 的元素。id属性值一般唯一
        2. getElementsByTagName() 返回所有具有指定名称的元素节点。返回值是一个数组
        3. getElementsByClassName():根据Class属性值获取元素对象们。返回值是一个数组
        4. getElementsByName() 返回带有指定名称的对象集合。返回值也是一个数组。
      2. 创建其他DOM对象
        1. createAttribute(name) 创建拥有指定名称的属性节点,并返回新的 Attr 对象。
        2. createComment() 创建注释节点。
        3. createElement() 创建元素节点。
        4. createTextNode() 创建文本节点。
    3. 属性
  • Element:元素对象
    • 获取:通过document对象类获取和创建
    • 方法:
      1. removeAttribute(“属性名称”) 删除指定的属性。
      2. setAttribute() 添加新属性。
  • Node:结点对象,其他5个的父对象
    • 特点:所有dom对象都可以被认为是一个节点
    • 方法:
      • CRUD dom树
        1. appendChild() 向节点的子节点列表的结尾添加新的子节点。
        2. removeChild() 删除(并返回)当前节点的指定子节点。
        3. 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>
    ID:<input type="number" id="ID" placeholder="请输入编号">
    名字:<input type="text" id="name" placeholder="请输入你的姓名">
    性别:<input type="radio" id="male" value="" name="gender"><input type="radio" id="female" value="" name="gender"><input type="button" value="添加" id="btn_add">
</div>

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

<script>
    /**
     * 分析
     *      1. 添加:
     *          1. 给添加按钮绑定单击事件
     *          2. 获取文本框内容
     *          3. 创建 tr,td 设置特点文本框的内容
     *          4. 将td添加到tr中
     *          6. 获取table,将tr添加到table中
     *      2. 删除
     *          1. 确定点击的是哪一个超链接
     *
     *          2. 怎么删除?
     */
    var btn_add = document.getElementById("btn_add");
    btn_add.onclick=function (){
        var id=document.getElementById("ID").value;
        var name=document.getElementById("name").value;
        var gender=document.getElementsByName("gender");
        var  gendervalue;
        for (var i=0;i<gender.length;i++){
            if(gender[i].checked){
                gendervalue=gender[i].value;
                break;
            }
        }

        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(gendervalue);
        td_gender.appendChild(text_gender);
        var td_caozuor=document.createElement("td");
        var btn_caozuor = document.createElement("input")
        btn_caozuor.value="删除";
        btn_caozuor.id="btn_del"
        btn_caozuor.type="button";
        btn_caozuor.onclick=function (){//这里面的this就是接受的对象
           var table = this.parentNode.parentNode.parentNode;
           var tr = this.parentNode.parentNode;
           table.removeChild(tr);
        }
        // function deltr (obj){//这里面的this就是接受的对象
        //        var table = obj.parentNode.parentNode.parentNode;
        //        var tr = obj.parentNode.parentNode;
        //        table.removeChild(tr);
        //     }
        // btn_caozuor.setAttribute("onclick","deltr(this);")
        td_caozuor.appendChild(btn_caozuor);


        //4. 创建tr
        var eletr=document.createElement("tr");
        eletr.appendChild(td_id);
        eletr.appendChild(td_name);
        eletr.appendChild(td_gender);
        eletr.appendChild(td_caozuor);
        var tab = document.getElementById("tab");
        tab.appendChild(eletr);



    }
</script>

</body>
</html>

HTML DOM

  1. 标签体的设置和获取:innerHTML

    1. 使用innerHTML来改进案例:动态表格的代码
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>HTMLDOM</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 id="d1">-->
    <!--    div1-->
    <!--</div>-->
    
    <!--<script>-->
    <!--    // var div = document.getElementById("d1");-->
    <!--    // var  innerHTML = div.innerHTML;//获取标签体内容-->
    <!--    // // alert(innerHTML);-->
    <!--    //-->
    <!--    // //div标签中替换一个文本输入框-->
    <!--    // // div.innerHTML="<input type='text'>";-->
    <!--    // //div标签中追加一个文本输入框-->
    <!--    // div.innerHTML+="<input type='text'>";-->
    <!--</script>-->
    <div>
        ID:<input type="number" id="ID" placeholder="请输入编号">
        名字:<input type="text" id="name" placeholder="请输入你的姓名">
        性别:<input type="radio" id="male" value="" name="gender"><input type="radio" id="female" value="" name="gender"><input type="button" value="添加" id="btn_add">
    </div>
    
    <table id="tab">
        <caption>学生信息表</caption>
        <tr>
            <th>编号</th><th>姓名</th><th>性别</th><th>操作</th>
        </tr>
    </table>
    
    <script>
        /**
         * 分析
         *      1. 添加:
         *          1. 给添加按钮绑定单击事件
         *          2. 获取文本框内容
         *          3. 创建 tr,td 设置特点文本框的内容
         *          4. 将td添加到tr中
         *          6. 获取table,将tr添加到table中
         *      2. 删除
         *          1. 确定点击的是哪一个超链接
         *
         *          2. 怎么删除?
         */
        var btn_add = document.getElementById("btn_add");
        // btn_add.οnclick=function (){
        //     var id=document.getElementById("ID").value;
        //     var name=document.getElementById("name").value;
        //     var gender=document.getElementsByName("gender");
        //     var  gendervalue;
        //     for (var i=0;i<gender.length;i++){
        //         if(gender[i].checked){
        //             gendervalue=gender[i].value;
        //             break;
        //         }
        //     }
        //
        //     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(gendervalue);
        //     td_gender.appendChild(text_gender);
        //     var td_caozuor=document.createElement("td");
        //     var btn_caozuor = document.createElement("input")
        //     btn_caozuor.value="删除";
        //     btn_caozuor.id="btn_del"
        //     btn_caozuor.type="button";
        //     btn_caozuor.οnclick=function (){//这里面的this就是接受的对象
        //         var table = this.parentNode.parentNode.parentNode;
        //         var tr = this.parentNode.parentNode;
        //         table.removeChild(tr);
        //     }
        //     // function deltr (obj){//这里面的this就是接受的对象
        //     //        var table = obj.parentNode.parentNode.parentNode;
        //     //        var tr = obj.parentNode.parentNode;
        //     //        table.removeChild(tr);
        //     //     }
        //     // btn_caozuor.setAttribute("onclick","deltr(this);")
        //     td_caozuor.appendChild(btn_caozuor);
        //
        //
        //     //4. 创建tr
        //     var eletr=document.createElement("tr");
        //     eletr.appendChild(td_id);
        //     eletr.appendChild(td_name);
        //     eletr.appendChild(td_gender);
        //     eletr.appendChild(td_caozuor);
        //     var tab = document.getElementById("tab");
        //     tab.appendChild(eletr);
        //
        //
        //
        // }
    
        //使用innerHTML添加,使得代码更加简洁
        document.getElementById("btn_add").onclick=function () {
            //2. 获取文本框的内容
            var id = document.getElementById("ID").value;
            var name = document.getElementById("name").value;
            var gender=document.getElementsByName("gender");
                var  gendervalue;
                for (var i=0;i<gender.length;i++){
                    if(gender[i].checked){
                        gendervalue=gender[i].value;
                        break;
                    }
                }
            var table = document.getElementsByTagName("table")[0];
            //追加一行
            table.innerHTML+="<tr>\n" +
                "    <td>"+id+"</td>\n" +
                "    <td>"+name+"</td>\n" +
                "    <td>"+gendervalue+"</td>\n" +
                "    <td><input type=\"button\" οnclick=\"deltr(this);\" value=\"删除\"></td>\n" +
                "</tr>";
        }
        function deltr(obj){
            var table = obj.parentNode.parentNode.parentNode;
            var tr = obj.parentNode.parentNode;
            table.removeChild(tr);
        }
    </script>
    
    </body>
    </html>
    
  2. 使用html元素对象的属性

    • 过多需要自行查阅API文档
    • 链接:https://www.w3school.com.cn/js/js_htmldom.asp
  3. 控制样式

    1. 使用元素的style属性来设置

      如:

      <script>
          var d1 = document.getElementById("d1");
          d1.onclick=function (){
              //修改样式方法一
              d1.style.border="1px solid red";
              d1.style.width="200px";
      
              //font-size --> fontSize
              d1.style.fontSize="50px";
          }
      </script>
      
    2. 提前定义好类选择器的样式,通过元素的className属性来设置class属性值。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>HTMLDOM——控制样式</title>
    <style>
        .div2{
            border:1px solid green;
            width: 400px;
            height: 400px;
        }
    </style>
</head>
<body>
<div id="d1">
    div1
</div>

<div id="d2">
    div2
</div>
<script>
    var d1 = document.getElementById("d1");
    d1.onclick=function (){
        //修改样式方法一
        d1.style.border="1px solid red";
        d1.style.width="200px";

        //font-size --> fontSize
        d1.style.fontSize="50px";
    }
    var d2=document.getElementById("d2");
    d2.onclick=function (){
        d2.className="div2";
    }
</script>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

立乱来

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

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

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

打赏作者

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

抵扣说明:

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

余额充值