zoukankan      html  css  js  c++  java
  • DOM分类及HTML DOM

    DOM简介


     DOM是W3C(World Wide Web Consortium)标准。

    “W3C 文档对象模型(DOM,全称Document Object Model)”是一个使程序和脚本有能力动态地访问和更新文档的内容、结构以及样式的平台和语言中立的接口。

    DOM被分为3个不同的部分/级别:

    • 核心 DOM
    • XML DOM
    • HTML DOM

    核心DOM:提供了操作文档的公有属性和方法,就相当于鼻祖。它可以可操作一切结构化文档的API,包括HTML和XML。是万能的!但是很繁琐!

    HTML DOM:它是专门操作HTML文档的简化版DOMAPI仅对常用的复杂的API进行了简化,对核心DOM进行了在HTML方面的拓展。不是万能的!但是简单

    XML DOM:提供了所有XML元素的对象和属性,以及访问方法,与HTML DOM类似。

    HTML DOM


     节点概念

     HTML DOM 把所有的元素全部转化为节点对象,以后要想操作HTML里的内容就等于操作节点。

    节点分类

    • 文档节点[object HTMLDocument]
    • 元素节点[object HTMLXXXElement]
    • 属性节点[object Attr]
    • 内容节点[object Text]

    1、文档节点就是根,只存在一个,想要得到它十分容易,写一个 document 相当于文档节点了。

    <script>
        document.write(document);
    </script>
    渲染结果

    2、元素节点:文档节点是根,所以他肯定有许多小弟了,比如 div 、p等等,都是元素节点,属于文档节点的下级。

    3、属性和内容节点:id就是div的一个属性节点的节点名,“HTML DOM”就是div内容节点的节点值,节点名和节点值就是节点的属性之一。

    <div id="div1">HTML DOM</div>

    DOM查找


    获取元素节点

    我们对DOM操作,最重要的是想修改它的内容,而想要修改DOM元素,我们必须先找到他

    • document.getElementById       通过id获取元素节点 
    • getElementsByTagName       通过标签名称获取元素节点
    • getElementsByClassName         通过类名获取元素节点
    • getElementsByName                  通过表单元素的name获取元素节点
    • querySelector("[selector]")     支持一切css中的选择器,但如果匹配多个,只会返回第一个
    • querySelectorAll("[selector]")    返回所有选中的元素

    因为id是唯一的,所以上面除了通过id获取元素节点外,其他获取到的都是节点数组。

    例如:

    <!--id获取到是单个元素-->
    <div id="div1" >
        HTML DOM
    </div>
    
    <script>
        var  div1 = document.getElementById("div1");
        //或者
        div1 = document.querySelector("#div1");
        document.write(div1);
    </script>
    渲染结果

    <!--其他获取到的是元素数组-->
    <div id="div1" >
        HTML DOM
    </div>
    
    <script>
        var divs = document.getElementsByTagName("div");
        var div1 = divs[0];
    </script>
    渲染结果

    遍历元素数组,根据javascript的知识,数组有个属性length,因此我们可以使用for循环遍历他

    <div class="div">
        HTML DOM
    </div>
    <div class="div">
        DIV2
    </div>
    
    <script>
    
        console.log("--getElementsByTagName--");
        var element = document.getElementsByTagName("div");
        for(var i = 0; i < element.length; i++){
            console.log(element[i].innerText);
        } 
    
        console.log("--querySelectorAll--");
        element = document.querySelectorAll("div");
        for(var i = 0; i < element.length; i++){
            console.log(element[i].innerText);
        }
    
    
        console.log("--querySelectorAll select class--");
        element = document.querySelectorAll(".div");
        for(var i = 0; i < element.length; i++){
            console.log(element[i].innerText);
        }  
    </script>

    获取属性节点

    首先需要获取到元素节点,然后可以通过attributes获取元素节点的属性节点,属性可以有多个,所以获取到是属性节点数组。

    若要获取某一指定的属性的节点例如id,可以通过键名xx["id"]获取到属性节点。

    <div id="d1" align="center" class="abc">hello HTML DOM</div>
    <script>
        var  div1 = document.getElementById("d1");
        var as = div1.attributes;
        document.write("div总共有"+as.length +" 个属性");
        document.write("分别是:");
        for(i = 0; i< as.length; i++){
            document.write("<br>");
            document.write(as[i].nodeName);
            document.write(":");
            document.write(as[i].nodeValue);
        }
        document.write("<br>");
        document.write("div的id属性值是:"+ as["id"].nodeValue);
    </script>

    渲染结果

    获取内容节点

    通过childNodes获取到的第一个子节点就是内容节点

    <div id="d1" align="center" class="abc">hello HTML DOM</div>
    <script>
        var  div1 = document.getElementById("d1");
        var content = div1.childNodes[0];
        document.write("div的内容节点名是:"+content.nodeName);
        document.write("<br>");
        document.write("div的内容节点值是:"+content.nodeValue);
    </script>

    渲染结果

    节点的属性


    • nodeName    节点名称
    • nodeValue     节点值
    • nodeType      节点类型
    • innerHTML    元素节点的文本信息
    • 元素节点的属性,可直接访问
      • id  
      • value  
      • className  
    <div id="div1" class="d">
        愿用一生守护你
    </div>
    <hr>
    <script>
        function w(s){
            document.write(s);
        }
    
        //元素节点
        var div1 = document.getElementById("div1");
        //属性节点数组
        var attrs = div1.attributes;
        //遍历属性节点
        for(var i = 0; i < attrs.length; i++){
            //节点名
            w(attrs[i].nodeName);
            w(" : ");
            //节点值
            w(attrs[i].nodeValue);
            w("<br>");
        }
    
        //获取内容节点的节点值
        var value = div1.childNodes[0].nodeValue;
        w(value);
        w("<br>");
        //获取内容节点太复杂了,简化一点
        var singleValue = div1.innerHTML;
        w(singleValue);
        w("<br>");
    
        //直接访问内置的属性
        w(div1.id);
        w("<br>");
        w(div1.className);
    </script>

    渲染结果

    <div class="div">    HTML DOM</div><div class="div">DIV2</div>
    <script>
        console.log("--getElementsByTagName--");    var element = document.getElementsByTagName("div");    for(var i = 0; i < element.length; i++){        console.log(element[i].innerText);    } 
        console.log("--querySelectorAll--");    element = document.querySelectorAll("div");    for(var i = 0; i < element.length; i++){        console.log(element[i].innerText);    }

        console.log("--querySelectorAll select class--");    element = document.querySelectorAll(".div");    for(var i = 0; i < element.length; i++){        console.log(element[i].innerText);    }  </script>

    div1
  • 相关阅读:
    《Advanced Bash-scripting Guide》学习(四):一个显示时间日期登录用户的脚本
    《Advanced Bash-scripting Guide》学习(三):自删除脚本和自读取内容的脚本
    51nod 1005 大数加法
    51nod1019 逆序数
    scoi2010 幸运数字
    COGS 513 八
    [HNOI2006]超级英雄Hero
    NOIP2010 关押罪犯
    [Scoi2010]游戏
    bzoj 2820: YY的GCD
  • 原文地址:https://www.cnblogs.com/hemou/p/11192820.html
Copyright © 2011-2022 走看看