JavaScript 学习总结(3) --- 操作DOM对象

JavaScript 学习总结(3)— 操作DOM对象

HTML文档被浏览器解析后就是一棵DOM树,要改变HTML的结构,就需要通过JavaScript来操作DOM。

1.DOM对象简介

  • DOM(Document Object Model):文档对象模型。

    所谓文档对象模型,其实就是对网页HTML中的各种元素的一种内部的表示,例如HTML中的头、段落、列表、风格、ID等,所有的元素都能通过DOM来访问 。

    结构为:
    在这里插入图片描述

  • DOM是一个树形结构。操作一个DOM节点实际上就是以下几个操作:

    • 更新:更新该DOM节点的内容,相当于更新了该DOM节点表示的HTML的内容;
    • 遍历:遍历该DOM节点下的子节点,以便进行进一步操作;
    • 添加:在该DOM节点下新增一个子节点,相当于动态增加了一个HTML节点;
    • 删除:将该节点从HTML中删除,相当于删掉了该DOM节点的内容以及它包含的所有子节点。

2. 节点

在讲对DOM的操作之前。先清楚节点的概念及节点之间的关系。

  • 在DOM 中,每个部分都是节点:

    • 文档本身是文档节点
    • 所有 HTML 元素是元素节点
    • 所有 HTML 属性是属性节点
    • HTML 元素内的文本是文本节点
    • 注释是注释节点
  • 节点与节点之间的关系:
    在这里插入图片描述

  • 获取节点:

    在操作一个DOM节点前,我们需要先拿到这个DOM节点。最常用的方法是上篇文档(JavaScript–操作BOM对象)中讲到的方法:document.getElementById()document.getElementsByTagName()等。

  • 节点属性:

    属性名称说明
    parentNode返回节点的父节点
    childNodes返回子节点集合,childNodes[i]
    firstChild返回节点的第一个子节点,最普遍的用法是访问该元素的文本节点
    lastChild返回节点的最后一个节点
    nextChild下一个节点
    previousSibling上一个节点
  • 节点信息:

    节点信息说明
    nodeName节点名称
    nodeValue节点值
    nodeType节点类型
    节点类型nodeType值
    元素element1
    属性attr2
    文本text3
    注释comments8
    文档docunment9
    • 案例:获取并查看节点信息
    <body>
        <ul id="NodeList">
            <li>AAAAAA</li>
            <li>BBBBBB</li>
            <li>BBBBBB</li>
        </ul>
    
        <script>
            var res = document.getElementById("NodeList").firstChild;
            console.log(res);
            console.log(res.nodeType);
        	console.log(res.nodeName);
        	console.log(res.nodeValue);
        </script>
    </body>
    

在这里插入图片描述

3. element对象

  • 在 DOM 中,element 对象表示 HTML 元素。

    element 对象可以拥有类型为元素节点、文本节点、注释节点的子节点。

  • element属性:

    属性名称说明
    firstElementChild返回节点的第一个子节点,最普遍的用法是访问该元素的文本节点
    lastElementChild返回节点的最后一个节点
    nextElementChild返回节点的下一个节点
    previousElementSibling返回节点的上一个节点

    案例:使用element属性获取子元素

    <body>
        <section id="news">
            <header>喜报</header>
            <ul>
                <li>
                    <a href="">恭喜A:获得阿里巴巴offer</a>
                    <a href="">恭喜A2:获得阿里巴巴offer</a>
                </li>
                <li><a href="">恭喜B:获得腾讯offer</a></li>
                <li><a href="">恭喜C:获得百度offer</a></li>
                <li><a href="">恭喜D:获得网易offer</a></li>
                <li><a href="">恭喜E:获得浦发银行offer</a></li>
            </ul>
        </section>
        <script>
            // //获取元素
            var info = document.getElementById("news").lastElementChild.firstElementChild.lastElementChild;
            console.log(info);
            document.write(info.innerHTML);    
    	</script>
    </body>
    

在这里插入图片描述

说明:

 /*
 console.log : 用来调试打印对象 . 可以打印所有东西
 document.write : 只能写入Html元素

 [object Text] : 文本对象 , 无法直接写网页中 , 会出现一个未定义 .
 [object HTMLElement] : 网页元素对象,可以直接调用innerHtml写入网页 .
 * */

4. 操作节点

获取到节点后,就可以操作一个节点。对一个DOM节点有以下几个操作:

  • 操作节点属性
  • 创建和插入节点
  • 删除和替换节点
  • 操作节点样式
  • 获取元素的样式

4.1 操作节点属性

  • 节点的属性操作有得到(get)节点属性和设置(set)节点属性,格式为:

    getAttribute("属性名");

    setAttribute("属性名","属性值");

    案例:获得节点属性和设置节点属性。

    <body>
        <a href="#" id="tt" style="">操作节点属性</a>
       
       <script>
            var t = document.getElementById("tt").getAttribute("href");
            console.log(t);
                    document.getElementById("tt").setAttribute("href","https://www.baidu.com");
            t = document.getElementById("tt").getAttribute("href");
            document.getElementById("tt").setAttribute("style","border: 10px dashed black");
            console.log(t);
        </script>
    </body>
    

    在这里插入图片描述

4.2 创建和插入节点

  • 创建一个新节点:

    createElement(tagName);:创建一个标签名为tagName的新元素节点。

  • 插入节点:

    名称说明
    A.appendChild(B);把B节点追加到A节点的末尾
    insertBefore(A,B);把A节点插入到B节点之前
  • 复制节点:

    cloneNode(deep);:复制某个指定的节点。

  • 案例:创建和插入节点

    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    
        <style>
            *{
                font-size: 20px;
                font-family: "微软雅黑";
                line-height: 30px;
            }
    
            /*设置将要选择的书的图片的属性*/
            div{
                padding: 5px;
                text-align: center;
            }
        </style>
    </head>
    <body>
        <p>
            选择你喜欢的书 :<br>
            <input type="radio" name="book" onclick="book()">剑指Offer
            <input type="radio" name="book" onclick="book()">深入理解Java虚拟机
        </p>
    
        <script>
            /*操作节点*/
            function book() {
                /*获取节点信息*/
                var ele = document.getElementsByName("book");
                var bName = document.getElementsByTagName("div")[0];
                //console.log(ele);
                if (ele[0].checked){
                    // 动态创建一个节点
                    var img = document.createElement("img");
                    // 需要给节点设置属性
                    img.setAttribute("src","images/1.png");
                    img.setAttribute("alt","剑指Offer");
                    // 给他安排一个位置
                    bName.appendChild(img);
                }
                if (ele[1].checked){
                    var img = document.createElement("img");
                    img.setAttribute("src","images/2.png");
                    img.setAttribute("alt","深入理解Java虚拟机");
                    bName.appendChild(img);
                }
            }
        </script>
    </body>
    ```![在这里插入图片描述](https://img-blog.csdnimg.cn/20190725161148165.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0ODIzMDkx,size_16,color_FFFFFF,t_70)
    

在这里插入图片描述

4.3 删除和替换节点

  • 方法:

    方法说明
    removeChild(node)删除节点
    replaceChild(newNode,oldNode) 属性attr用新的节点替换指定的旧节点
  • 案例:删除了插入节点

    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    
        <style>
            *{
                padding: 0px;
                margin: 0px;
                font-size: 20px;
            }
            ul li{
                list-style: none;
            }
            li{
                float:left;
                text-align: center;
            }
    
        </style>
    
    </head>
    <body>
    
    <ul>
    
        <li>
            <img src="images/1.png" alt="剑指Offer" id="first">
            <p><input type="button" value="删除我" onclick="del()"></p>
        </li>
        <li>
            <img src="images/2.png" alt="深入理解Java虚拟机" id="second">
            <p><input type="button" value="替换我" onclick="rep()"></p>
    
    
    </ul>
    
    <script>
    
        function del() {
            var delImg = document.getElementById("first");
            delImg.parentNode.removeChild(delImg);
        }
    
        function rep() {
            var oldImg = document.getElementById("second");
            var newImg = document.createElement("img");
            newImg.setAttribute("src","images/1.png");
            oldImg.parentNode.replaceChild(newImg,oldImg);
        }
    </script>
    </body>
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值