zoukankan      html  css  js  c++  java
  • 【web必知必会】—— DOM:四个常用的方法

      终于开始复习DOM的知识了,这一阵忙乎论文,基本都没好好看技术的书。

      记得去年实习的时候,才开始真正的接触前端,发现原来JS可以使用的如此灵活。

      说起DOM就不得不提起javascript的组成了,javascript是由三部分组成的:

      1 ECMAScript

      2 BOM

      3 DOM

      最开始,网页是由HTML这种静态的标签语言组成的,后来为了丰富网页,引入了Script脚本语言。

      但由于浏览器厂商太多,每个厂商都使用自己的语言,导致script的语言种类繁多,最终由Netscape和sun对Script进行标准化,推出ECMAScript。

      而后的浏览器大战使得DOM成为一种规范。

      简单的说:

      ECMAScript是一种javascript基本的核心,BOM是针对浏览器的javascript,而DOM则是针对文档对象的javascript。

      下面就针对DOM做一下简单的介绍

      在DOM中认为html中所有标签都是对象,整个HTML网页就是一颗文档树。

      每一个标签都是这个文档中的一个对象,每个标签由元素节点、属性节点和文本节点组成。

      元素节点:定义了该标签的类型

      属性节点:定义了标签中的属性

      文本节点:定义了标签所包含的文本,是标签的主要显示内容

      他们的关系如下图所示:

      关于DOM,最常用的四个方法:

      1 getElementById() 通过标签中的id名称,获取节点对象

      2 getElementsByTagName() 通过标签名字,获取节点对象的数组

      3 getAttribute() 获取对象的某个属性

      4 setAttribute() 设置对象的某个属性

      例如下面的样例代码:

    <!doctype html>
    <html>
        <head>
             <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
             <title>Shopping list</title>
    
             <style type="text/css">
                p {
                    color:yellow;
                    font-family: "arial",sans-serif;
                    font-size: 1.2em;
                }
                body {
                    color:white;
                    background-color: black;
                }
                .special {
                    font-style: italic;
                }
                h2.special {
                    text-transform: uppercase;
                }
                #purchases {
                    border:1px solid white;
                    background-color: #333;
                    color: #ccc;
                    padding:1em;
                }
                #purchases li {
                    font-weight: bold;
                }
             </style>
        </head>
        <body>
            <h1>What to buy!</h1>
            <p title="a gentle reminder">Don't forget to buy this stuff.</p>
            <ul id="purchases">
                <li>A tin of beans</li>
                <li>Cheese</li>
                <li>Milk</li>
            </ul>
            <ul id="test">
                <li>A tin of beans</li>
                <li>Cheese</li>
                <li>Milk</li>
            </ul>
            <p class="special">This paragraph has the special class</p>
            <h2 class="special">So does this headline</h2>
    
            <script type="text/javascript">
                var purchases = document.getElementById("purchases");
                console.log(purchases);
                var liItems1 = document.getElementsByTagName("li");
                console.log(liItems1);
                var liItems2 = purchases.getElementsByTagName("*");
                console.log(liItems2);
                var pItems = document.getElementsByTagName("p");
                for(var i=0;i<pItems.length;i++){
                    console.log(pItems[i].getAttribute("title"));
                }
                var pSpecial = pItems[pItems.length-1];
                pSpecial.setAttribute("title","my special title");
                for(var i=0;i<pItems.length;i++){
                    console.log(pItems[i].getAttribute("title"));
                }
            </script>
        </body>
    </html>

      通过上面的代码,可以更明显的了解这四个方法的作用,页面效果如下:

      getElementsById()

      通过getElementById()可以返回该id所在的节点对象,在html中id是唯一的,不能重复,因此通过这个方法肯定只能得到一个对象。

      因此下面的代码:

    var purchases = document.getElementById("purchases");
    console.log(purchases);

      将会得到如下的结果:

      getElementsByTagName()

      再看getElementsByTagName(),这个是返回标签对应的所有对象集合,因此方法名字是Elements!

    var liItems1 = document.getElementsByTagName("li");
    console.log(liItems1);
    var liItems2 = purchases.getElementsByTagName("*");
    console.log(liItems2);

      上面的代码中,第一个方法获得是整个文档的li对象集合,而第二个方法是purchases对象中包含的li集合。

      因此,第一个方法获得了6个li对象,而第二个方法中只有三个。

      另外可以看到,这个方法返回的集合中有一个属性,length,可以获得集合的长度。

      getAttribute()

      这个方法只能由对象来调用,但是不能是document对象。因此通常是使用getElementById获得指定id的对象,在调用该方法。

      两个方法搭配,可以获得该对象的特定属性。

                var pItems = document.getElementsByTagName("p");
                for(var i=0;i<pItems.length;i++){
                    console.log(pItems[i].getAttribute("title"));
                }

      上面代码中,获取了p标签的对象集合,上文示例代码中有两个p标签,因此这个集合包含两个对象。而只有第一个对象包含title属性。

      因此会得到如下的结果:

      setAttribute()

      类似上面的getAttribute方法,只能由对象来调用。

                var pSpecial = pItems[pItems.length-1];
                pSpecial.setAttribute("title","my special title");
                for(var i=0;i<pItems.length;i++){
                    console.log(pItems[i].getAttribute("title"));
                }

      上面的代码,仅仅作为参考:由于第二个对象没有title属性,因此为他设置titel属性后,得到如下的内容:

      需要注意的是,由于DOM是在页面加载完静态代码文件后动态刷新生成的,因此DOM所做的操作,并不会改变源代码的内容。

      参考

      参考书籍:《JavaScript DOM编程艺术》

  • 相关阅读:
    2011年 CIO简历该怎么写?
    OC内存管理
    【Android游戏开发十五】关于Android 游戏开发中 OnTouchEvent() 触屏事件的性能优化笔记!
    【Android游戏开发十二】(保存游戏数据 [上文])详解SharedPreference 与 FIleInputStream/FileOutputStream将数据存储到SD卡中!
    ORA16014: 日志 1 的序列号 83 未归档, 没有可用的目的
    【Android游戏开发十四】深入Animation,在SurfaceView中照样使用Android—Tween Animation!
    2011来临 IT人员应该具备哪些技能?
    垃圾控件DatePicker
    【Android游戏开发十八】解放手指,利用传感器开发游戏!(本文讲解在SurfaceView中用重力传感器控制圆球的各方向移动)
    【Android游戏开发十三】(保存游戏数据 [下文])详解SQLite存储方式,并把SQLite的数据库文件存储在SD卡中!!!
  • 原文地址:https://www.cnblogs.com/xing901022/p/4333075.html
Copyright © 2011-2022 走看看