JavaWeb(7) DOM编程

目录

一、什么是DOM编程

二、获取页面元素的API

1.在整个文档范围内查找元素结点

2.在具体元素节点范围内查找子节点

3.查找指定子元素节点的父节点

4.查找指定元素节点的兄弟节点

5 .整体代码演示

三、操作元素属性值API

1.属性操作

2.内部文本操作

3 .整体代码演示

 四、增删元素API

1.对页面的元素进行增删操作

2.整体代码演示

总结


一、什么是DOM编程

  • 简单来说:DOM(Document Object Model)编程就是使用document对象的API完成对网页HTML文档进行动态修改,以实现网页数据和样式动态变化效果的编程。
  • document对象代表整个html文档,可用来访问页面中的所有元素,是最复杂的一个dom对象,可以说是学习好dom编程的关键所在。

  • 根据HTML代码结构特点,document对象本身是一种树形结构的文档对象。

dom树中节点的类型

  • node 节点,所有结点的父类型

    • element 元素节点,node的子类型之一,代表一个完整标签

    • attribute 属性节点,node的子类型之一,代表元素的属性

    • text 文本节点,node的子类型之一,代表双标签中间的文本


二、获取页面元素的API

1.在整个文档范围内查找元素结点

功能API返回值
根据id值查询document.getElementById(“id值”)一个具体的元素节
根据标签名查询document.getElementsByTagName(“标签名”)元素节点数组
根据name属性值查询document.getElementsByName(“name值”)元素节点数组
根据类名查询document.getElementsByClassName("类名")元素节点数组

2.在具体元素节点范围内查找子节点

功能API返回值
查找子标签element.children返回子标签数组
查找第一个子标签element.firstElementChild标签对象
查找最后一个子标签element.lastElementChild节点对象

3.查找指定子元素节点的父节点

功能API返回值
查找指定元素节点的父标签element.parentElement标签对象

4.查找指定元素节点的兄弟节点

功能API返回值
查找前一个兄弟标签node.previousElementSibling标签对象
查找后一个兄弟标签node.nextElementSibling标签对象

5 .整体代码演示


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
   <script>
    /* 
    1 获得document  dom树
        window.document
    2 从document中获取要操作的元素
        1. 直接获取
            var el1 =document.getElementById("username") // 根据元素的id值获取页面上唯一的一个元素
            var els =document.getElementsByTagName("input") // 根据元素的标签名获取多个同名元素
            var els =document.getElementsByName("aaa") // 根据元素的name属性值获得多个元素
            var els =document.getElementsByClassName("a") // 根据元素的class属性值获得多个元素
        2. 间接获取
            var cs=div01.children // 通过父元素获取全部的子元素
            var firstChild =div01.firstElementChild  // 通过父元素获取第一个子元素
            var lastChild = div01.lastElementChild   // 通过父元素获取最后一个子元素
            var parent = pinput.parentElement  // 通过子元素获取父元素
            var pElement = pinput.previousElementSibling // 获取前面的第一个元素
            var nElement = pinput.nextElementSibling // 获取后面的第一个元素
    3 对元素进行操作
        1. 操作元素的属性
        2. 操作元素的样式
        3. 操作元素的文本
        4. 增删元素   
    */
   function fun1(){
        //1 获得document
        //2 通过document获得元素
        var el1 =document.getElementById("username") // 根据元素的id值获取页面上唯一的一个元素
        console.log(el1)
   }
   function fun2(){
        var els =document.getElementsByTagName("input") // 根据元素的标签名获取多个同名元素
        for(var i = 0 ;i<els.length;i++){
            console.log(els[i])
        }
   }
   function fun3(){
        var els =document.getElementsByName("aaa") // 根据元素的name属性值获得多个元素
        console.log(els)
        for(var i =0;i< els.length;i++){
            console.log(els[i])
        }
   }

   function fun4(){
    var els =document.getElementsByClassName("a") // 根据元素的class属性值获得多个元素
    for(var i =0;i< els.length;i++){
            console.log(els[i])
        }
   }

   function fun5(){
    // 先获取父元素
     var div01 = document.getElementById("div01")
     // 获取所有子元素
     var cs=div01.children // 通过父元素获取全部的子元素
     for(var i =0;i< cs.length;i++){
            console.log(cs[i])
     }

     console.log(div01.firstElementChild)  // 通过父元素获取第一个子元素
     console.log(div01.lastElementChild)   // 通过父元素获取最后一个子元素
   }

   function fun6(){
        // 获取子元素
        var pinput =document.getElementById("password")
        console.log(pinput.parentElement) // 通过子元素获取父元素
   }

   function fun7(){
        // 获取子元素
        var pinput =document.getElementById("password")
        console.log(pinput.previousElementSibling) // 获取前面的第一个元素
        console.log(pinput.nextElementSibling) // 获取后面的第一个元素
   }
   </script>
</head>
<body>
    <div id="div01">
        <input type="text" class="a" id="username" name="aaa"/>
        <input type="text" class="b" id="password" name="aaa"/>
        <input type="text" class="a" id="email"/>
        <input type="text" class="b" id="address"/>
    </div>
    <input type="text" class="a"/><br>

    <hr>
    <input type="button" value="通过父元素获取子元素" onclick="fun5()" id="btn05"/>
    <input type="button" value="通过子元素获取父元素" onclick="fun6()" id="btn06"/>
    <input type="button" value="通过当前元素获取兄弟元素" onclick="fun7()" id="btn07"/>
    <hr>

    <input type="button" value="根据id获取指定元素" onclick="fun1()" id="btn01"/>
    <input type="button" value="根据标签名获取多个元素" onclick="fun2()" id="btn02"/>
    <input type="button" value="根据name属性值获取多个元素" onclick="fun3()" id="btn03"/>
    <input type="button" value="根据class属性值获得多个元素" onclick="fun4()" id="btn04"/>
    
</body>
</html>


三、操作元素属性值API

1.属性操作

需求操作方式
读取属性值元素对象.属性名
修改属性值元素对象.属性名=新的属性值

2.内部文本操作

需求操作方式
获取或者设置标签体的文本内容element.innerText
获取或者设置标签体的内容element.innerHTML

3 .整体代码演示

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

    <script>
         /* 
    1 获得document  dom树
        window.document
    2 从document中获取要操作的元素
        1. 直接获取
            var el1 =document.getElementById("username") // 根据元素的id值获取页面上唯一的一个元素
            var els =document.getElementsByTagName("input") // 根据元素的标签名获取多个同名元素
            var els =document.getElementsByName("aaa") // 根据元素的name属性值获得多个元素
            var els =document.getElementsByClassName("a") // 根据元素的class属性值获得多个元素
        2. 间接获取
            var cs=div01.children // 通过父元素获取全部的子元素
            var firstChild =div01.firstElementChild  // 通过父元素获取第一个子元素
            var lastChild = div01.lastElementChild   // 通过父元素获取最后一个子元素
            var parent = pinput.parentElement  // 通过子元素获取父元素
            var pElement = pinput.previousElementSibling // 获取前面的第一个元素
            var nElement = pinput.nextElementSibling // 获取后面的第一个元素
    3 对元素进行操作
        1. 操作元素的属性   元素名.属性名=""
        2. 操作元素的样式   元素名.style.样式名=""  样式名"-" 要进行驼峰转换
        3. 操作元素的文本   元素名.innerText   只识别文本
                           元素名.innerHTML   同时可以识别html代码 
        4. 增删元素   
    */

    function changeAttribute(){
        var in1 = document.getElementById("in1")
        //语法 元素.属性名 = ""
        //获得属性值
        console.log(in1.type)
        console.log(in1.value)
        //修改属性值
        in1.type="button"
        in1.value="嗨"
    }
    function changeStyle(){
        var in1 = document.getElementById("in1")
        //语法 元素.style.样式名=""     原始样式名中的“-”要转换为驼峰式,background-color ->backgroundColor
        in1.style.color="green"
        in1.style.borderRadius="100px"
    }
    function changeText(){
        var div01 = document.getElementById("div01")
        /* 
        语法    元素名.innerText  只识别文本
                元素名.innerHTML  同时可以识别HTML代码
        */
       console.log(div01.innerText)
       div01.innerText="嗨"
       div01.innerHTML="<h1>嗨</h1>"
    }
    </script>

    <style>
        #in1{
            color: blueviolet;
        }
    </style>
</head>
<body>
    <div id="div01" type="text" value="hello">

    </div>
    <input id="in1" type="text" value="hello">


    <hr>
    <button onclick="changeAttribute()">操作属性</button>
    <button onclick="changeStyle()">操作样式</button>
    <button onclick="changeText()">操作文本</button>
</body>
</html>

 四、增删元素API

1.对页面的元素进行增删操作

API功能
document.createElement(“标签名”)创建元素节点并返回,但不会自动添加到文档中
document.createTextNode(“文本值”)创建文本节点并返回,但不会自动添加到文档中
element.appendChild(ele)将ele添加到element所有子节点后面
parentEle.insertBefore(newEle,targetEle)将newEle插入到targetEle前面
parentEle.replaceChild(newEle, oldEle)用新节点替换原有的旧子节点
element.remove()删除某个标签

2.整体代码演示

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

    <script>
        /* 
   1 获得document  dom树
       window.document
   2 从document中获取要操作的元素
       1. 直接获取
           var el1 =document.getElementById("username") // 根据元素的id值获取页面上唯一的一个元素
           var els =document.getElementsByTagName("input") // 根据元素的标签名获取多个同名元素
           var els =document.getElementsByName("aaa") // 根据元素的name属性值获得多个元素
           var els =document.getElementsByClassName("a") // 根据元素的class属性值获得多个元素
       2. 间接获取
           var cs=div01.children // 通过父元素获取全部的子元素
           var firstChild =div01.firstElementChild  // 通过父元素获取第一个子元素
           var lastChild = div01.lastElementChild   // 通过父元素获取最后一个子元素
           var parent = pinput.parentElement  // 通过子元素获取父元素
           var pElement = pinput.previousElementSibling // 获取前面的第一个元素
           var nElement = pinput.nextElementSibling // 获取后面的第一个元素
   3 对元素进行操作
       1. 操作元素的属性   元素名.属性名=""
       2. 操作元素的样式   元素名.style.样式名=""  样式名"-" 要进行驼峰转换
       3. 操作元素的文本   元素名.innerText   只识别文本
                          元素名.innerHTML   同时可以识别html代码 
       4. 增删元素
            var element =document.createElement("元素名") // 创建元素
            父元素.appendChild(子元素)               // 在父元素中追加子元素
            父元素.insertBefore(新元素,参照元素)     // 在某个元素前增加元素
            父元素.replaceChild(新元素,被替换的元素) // 用新的元素替换某个子子元素
            元素.remove()                            // 删除当前元素
        
   */

   function addSy(){
        //创建一个新的元素
        var syli = document.createElement("li") //<li></li>
        //设置子元素的属性和文本
        syli.id="sy"
        syli.innerText="沈阳"
        //将子元素放入父元素中
        var cityul = document.getElementById("city")
        //再父元素中追加子元素
        cityul.appendChild(syli)
   }
   function addHebBeforeSz(){
        //创建一个新的元素
        var hebli = document.createElement("li") //<li></li>
        //设置子元素的属性和文本
        hebli.id="heb"
        hebli.innerText="哈尔滨"
        //将子元素放入父元素中
        var cityul = document.getElementById("city")
        //再父元素中追加子元素
        //cityul.insertBefore(新元素,参照元素)
        var szli = document.getElementById("sz")
        cityul.insertBefore(hebli,szli)
   }
   function replaceSzToCc(){
        //创建一个新的元素
        var ccli = document.createElement("li") //<li></li>
        //设置子元素的属性和文本
        ccli.id="cc"
        ccli.innerText="长春"
        //将子元素放入父元素中
        var cityul = document.getElementById("city")
        //再父元素中追加子元素
        //cityul.replaceChild(新元素,被替换元素)
        var szli = document.getElementById("sz")
        cityul.replaceChild(ccli,szli)
   }
   function replaceSzToCc(){
        //创建一个新的元素
        var ccli = document.createElement("li") //<li></li>
        //设置子元素的属性和文本
        ccli.id="cc"
        ccli.innerText="长春"
        //将子元素放入父元素中
        var cityul = document.getElementById("city")
        //再父元素中追加子元素
        //cityul.replaceChild(新元素,被替换元素)
        var szli = document.getElementById("sz")
        cityul.replaceChild(ccli,szli)
   }
   function removeSz(){
        var szli = document.getElementById("sz") //<li></li>
        //哪个元素调用remove该元素就会在DOM树中被移除
        szli.remove()
   }
   function clearCity(){
        var cityul = document.getElementById("city")

        //建议,删除的是ul中的内容(用for会改变索引,比较困难)
        /* var fc = cityul.firstChild
        while(fc != null){
            fc.remove
            fc = cityul.firstChild
        } */
        // cityul.innerHTML=""

        //不建议,删除的是整个ul结构
        cityul.remove
   }
  </script>

</head>
<body>
    <ul id="city">
        <li id="bj">北京</li>
        <li id="sh">上海</li>
        <li id="sz">深圳</li>
        <li id="gz">广州</li>

    </ul>


    <hr>
        <!-- 目标1 在城市列表的最后添加一个子标签 -->
        <button onclick="addSy()">增加沈阳</button>
        <!-- 目标2 在城市列表的深圳前添加一个子标签 -->
        <button onclick="addHebBeforeSz()">增加哈尔滨</button>
        <!-- 目标3 将城市列表的深圳替换为长春 -->
        <button onclick="replaceSzToCc()">替换深圳为长春</button>
        <!-- 目标4 将城市列表的深圳删除深圳 -->
        <button onclick="removeSz()">删除深圳</button>
        <!-- 目标5 清空城市列表 -->
        <button onclick="clearCity()">清空</button>
</body>
</html>

总结

        本篇对DOM编程进行了讲解和演示,便于学习和理解。部分内容源自网络,如有侵权,请联系作者删除处理,谢谢!

  • 40
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值