DOM

DOM(Document Object Model , 文档对象模型)
  • 概念
    节点
    1.分类:文档( Document ) 元素( Element ) 属性( Attribute )
    2.名称:
    在这里插入图片描述
    3.类型
    在这里插入图片描述
    4.取值
    在这里插入图片描述

  • 类型
    1.节点
    在这里插入图片描述
    2.文档
    = 、作用:
    在 客户端 JavaScript 中 document 是 Document 对象(class)的实例(instance)
    document 表示整个 HTML 文档,是整个HTML 文档的根节点(Node)
    = 、函数
    在这里插入图片描述
    = 、元素

实例:遍历节点
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <meta charset="UTF-8">
        <title>遍历节点</title>
        <link rel="shortcut icon" href="/yangying.jpg" type="image/jpeg">
    </head>
    <body>

        <!-- 这是HTML注释-->
        <h5 style="text-align: center ; color: blue ;">使用JavaScript遍历当前页面上所有的节点</h5>

    </body>

    <script type="text/javascript">
        ( function () {

            var traversal = function ( node ) {
                // 判断 node 是否存在( 存在即为 true )
                if( node ) {

                    if( node.nodeType == 3 || node.nodeType == 8 )  {
                        console.log( node );
                    }

                    // 判断 node 是否是一个文档(document : 9 ) 或元素 ( element : 1 )
                    if(  node.nodeType == 9 || node.nodeType == 1  ) {

                        console.log( node.nodeName ) ; // 输出当前被处理节点的名称

                        /** 如果 node 是个文档或元素,则需要处理其 属性 和 子节点 ***/

                        // 处理 node 节点的属性
                        if( node.hasAttributes ){
                            var attrs = node.attributes ; // 获取 node 的 所有属性对应集合 ( NamedNodeMap )
                            for( var i = 0 ; i < attrs.length ; i++ ){
                                var a = attrs[ i ] ; // 获得下标是 i 的属性
                                console.log( "\t" + a.nodeName + " : " + a.nodeValue );
                            }
                        }

                        // 处理子节点
                        if( node.hasChildNodes() ) {
                            var childs = node.childNodes ; // 获取node的所有直接子节点组成的集合( NodeList )
                            for( var i = 0 ; i < childs.length ; i++ ){
                                var child = childs[ i ] ;
                                traversal( child ) ; // 通过递归来处理子节点
                            }
                        }

                    }
                }
            };

            // 调用 traversal 函数 处理 根节点 ( document )
            traversal( document );

        })();
    </script>
</html>

运行结果:
在这里插入图片描述

实例: 追加元素
<script type="text/javascript">
        ( function () {

            // 直接通过 document 的 querySelector 来使用 CSS 选择器选择页面上的元素
            var li = document.querySelector( "ul>li:last-child" ); // list item

            // previousSibling 获取当前元素的前一个节点 ( Chrome 、FireFox 中获取到的是一个空白节点;IE 8 之前获取到的就是前一个元素 )
            var previousNode = li.previousSibling ;
            console.log( previousNode );

            // previousElementSibling 获取当前元素的前一个元素 ( Chrome 、FireFox 、IE 8+ 都支持 )
            var previousElement = li.previousElementSibling ;

            // var previousElement = li.previousSibling.previousSibling ;
            console.log( previousElement );

            previousElement.style.color = "red";
            previousElement.style.backgroundColor = "#dedede" ;

            var nextElement = li.nextElementSibling; // 访问下一个兄弟元素
            console.log( nextElement );

            // 使用 document 的 createElement 函数可以创建一个指定标签名对应的元素
            var newLi = document.createElement( "li" );
            newLi.innerHTML = "<b>新来的</b>";

            var ul =  li.parentNode ;
            ul.appendChild( newLi ); // 通过 li 的父元素 在 li 之后追加一个新的 li 元素

        })();
    </script>
  • DOM操作:
增删节点
       <style type="text/css">
           /* 标记选择器 */
           ul { width: 80% ; margin: 15px auto ; border: 1px solid blue ; padding: 0px ;  list-style: none ;  }
           /* 亲子选择器 */
           ul>li { line-height: 30px ; border-bottom: 1px solid green ; }

           ul>li:last-child { border-bottom: none ; }
           div { width: 80% ; margin: 15px auto ; border: 1px solid #dedede ; }
           div>* { margin: 10px ; }
       </style>
   </head>
   <body>

       <ul>
           <li class="first">first</li>
           <li class="second">second</li>
           <li class="third">third</li>
           <li class="fourth">fourth</li>
       </ul>

       <div>
           <input type="button" value="追加节点" class="append-button">
           <button type="button" class="insert-before-button">在最后一个节点之前插入新节点</button>
           <button type="button" class="insert-after-button" style="color: red;">在第一个节点之后插入新节点</button>
           <button type="button" class="replace-button">替换第二个节点</button>
           <button type="button" class="remove-button">删除最后一个节点</button>
       </div>

       <div style="color: red;text-align: center ; ">
           注意,没有 insertAfter 函数
       </div>

   </body>

   <script type="text/javascript">
       ( function () {


           var append = function () {
               // 获取页面上的第一个 ul
               var ul = document.querySelector( "ul" );

               var node = document.createElement( "li" );

               node.innerHTML = Date.now() ;

               ul.appendChild( node ); // 添加节点
           };
           var appendButton = document.querySelector( ".append-button" );
           appendButton.addEventListener( "click" , append , false );

           /******************************************************************/

           var insertBeforeButton = document.querySelector( ".insert-before-button" );
           var insert = function(){
               var ul = document.querySelector( "ul" ); // 获取页面上的第一个 ul ( 充当父元素 )
               var refChild = ul.lastElementChild ; // 获得最后一个子元素
               var newChild = document.createElement( "li" );
               newChild.innerHTML = "<b>" + Date.now() + "</b>" ;
               ul.insertBefore( newChild , refChild ); // 在 ul 内部的 refChild 之前 插入 newChild
           };
           insertBeforeButton.addEventListener( "click" , insert , false );

           /******************************************************************/

           var insertAfterButton = document.querySelector( ".insert-after-button" );
           var insertAfter = function(){
               var ul = document.querySelector( "ul" ); // 获取页面上的第一个 ul ( 充当父元素 )
               var refChild = ul.firstElementChild ; // 获得第一个子元素
               var newChild = document.createElement( "li" );
               newChild.innerHTML = "<b>" + Date.now() + "</b>" ;
               ul.insertAfter( newChild , refChild ); // 在 ul 内部的 refChild 之后 插入 newChild
           };
           insertAfterButton.addEventListener( "click" , insertAfter , false );

           /******************************************************************/

           var replaceButton = document.querySelector( ".replace-button" );
           var replace = function(){
               var ul = document.querySelector( "ul" ); // 获取页面上的第一个 ul ( 充当父元素 )

               var first = ul.firstElementChild;
               var second = first.nextElementSibling ;

               var newChild = document.createElement( "li" );
               newChild.innerHTML = "<b>" + Date.now() + "</b>" ;

               ul.replaceChild( newChild , second ) ; // 用 newChild 替换 ul  内部的 second 节点
           };
           replaceButton.addEventListener( "click" , replace , false );

           /******************************************************************/
           var removeButton = document.querySelector( ".remove-button" );
           var remove = function(){
               // 获取页面上的第一个 ul
               var ul = document.querySelector( "ul" );
               var lastElement = ul.lastElementChild ; // 获得最后一个子元素
               if( lastElement ) {
                   ul.removeChild( lastElement );
               }
           };
           removeButton.addEventListener( "click" , remove , false );

       })();
   </script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值