zoukankan      html  css  js  c++  java
  • [ 第三章] JavaScript DOM(4)节点

    3.4 节点


      节点(node)这个词是网络术语,它表示网络中的一个连接点。一个网络是由一些网络构成的集合。

      在现实世界里一切事物都是由原子构成,原子是现实世界的节点。但原子本身还可以进一步分解为更细小的亚原子微粒。这些亚原子微粒同样是被当节点。DOM 也是同样的情况,只不过此时的节点是文档树起的树枝和树叶而已。在DOM里有许多不同类型的节点,就像是原子包含着亚原子微粒那样,也有很多类型的节点包含着其它类型的节点。接下来我们先看看其中的三种:元素节点、文本节点和属性节点。

    3.4.1 元素节点


      DOM的原子是元素节点(element node)。

      文档中我们使用的<html> <body> <p> <ul>  之类的元素。如果把Web上的文档比作一座大厦,元素就是构造这座大厦的砖块,这些元素在文档的布局形成了文档的结构。

      标签的名字就是元素的名字,文本段落元素的名字是“P“ ,无序列表元素的名字是”ul" ,列表项元素的的名字是li。

      元素可以包含其他的元素。没有被包含的唯一元素是<html> 元素,它是我们的节点树的根元素。

    3.4.2 文本节点


      文本节点是节点类型的一种,如果一份文档完全由一些元素节点构成,它将有一个结构,但这份文档将不会包含什么内容。在内容为王的互联网上,绝大多数内容都是由文本提供的。在HTML文档里,文本节点总是包含在元素节点的内部。但并非所有的元素节点都有文本节点。

    3.4.3 属性节点


      属性节点用来对元素作出更加详细的描述。例如,几乎所有的元素都有一个title 属性,而我们可以利用这个属性对包含在元素里的东西作出准确的描述:

      <p title='a gentle reminder '>Don't forget to buy this stuff .</p>

      在DOM中,title='a gentle reminder ' 是一个属性节点(attribute node);如图3-3所示。因为属性总是被放在起始标签里,所以属性节点总是被包含在元素节点中。并非所有的元素都包含属性,但所有的属性都被元素包含着。

     

    3.4.4 获取元素


      有三种DOM的方法可以获取元素节点。

    1》》 getElementById

      DOM提供了一个名为 getElementById 的方法,这个方法将返回一个与那个有着给定 id 属性值的元素对应的对象。请注意,JavaScript 语言区分大小写,所以在写出 getElememtById 时千万不要把大小写弄错了,如果把它错写了将得不到正确的结果。

      它是 document 对象特有的函数。在脚本代码里,函数名后面必须有一对圆括号,这时圆括号饮食着函数的参数。getElementById 方法只有一个参数:你想获得的那个元素的 id 属性的值。这个值必须放在单引号或是双引号里。

      document.getElementById( id );

    如下例所示:

    <div id='newid' >this is a new id</div>
    
    <script>
    
    var ele = document.getElementById('newid');
    
    // 这个调用将返回一个对象,这个对象对应着 document 对象里的一个独一无二的元素,那个元素的 html  id 属性值是 newid 。
    
    
    </script>

    可以用 typeOf 操作符来验证这一点。 typeOf 可以告诉我们它的操作数是一个字符串,数值,函数,布尔值还是对象。

    事实上,DOM 中的每个元素都是对象。利用DOM提供的方法可以得到任何一个对象。一般来说,用不着为文档每一个元素都 定义一个独一无二的id值,那也太小题大做了。DOM中提供了另一个方法来获取那些没有id属性的对象。

    2》》 getElementsByTagName

      getElementsByTagName 方法返回一个对象数组,每个对象分别对应着文档里有着给定标签的一个元素。类似于getElementById ,这个方法也只有一个参数,它的的参数就是标签的名字。

      getElementsByTagName(tag) , 它与 getElementById() 方法有许多相似的之处,但它返回的是一个数组。下面是一个例子:

      var lis = document.getElementsByTagName('li');

      这个调用将返回一个对象数组,每个对象分别对应着 document 对象中的一个列表元素,与任何其他的数组一样,我们可以利用length 属性查出这个数组元素的个数。

      lis.length;

      我们可以用 for 循环去遍历这个数组

      for (var i=0; i<lis.length; i++){

        alert( typeOf lis[i] );

      }

      

    3 >> getElementByClassName

      html5 中增加了一个令人期待已久的方法: getElementsByClassName. 同理,这个函数接收一个参数,就是类名:

      getElementsByClassName(class); 将返回一个包含给定class 属性值的所有元素的集合,就是一个数组 。

      var eles = document.getElementsByClassName('newclass');

      这个方法非常有用,但只有比较新的浏览器才支持它。为了弥补这一不足,DOM 脚本程序员使用已有的DOM 方法来实现自己的 getElemntsByClassName 方法,有点像是成人礼似的。多数情况下,他们的实现过程大致相似。这个函数能适用于新老浏览器:

    function getElementsByClassName(node,classname){
      var node = node ? node : document;
      if(node.getElementsByClassName){
             // 使用现有方法
             return node.getElementsByClassName(classname);
      }else{         
             var results = new Array(); // 用来存放最终结果,并返回
             var eles =  document.getElementsByTagName('*');// 获得所有的子元素
             // 匹配各个元素的classname 是否包含 classname        
             for( var i=0; i<eles.length; i++){
                  if(eles[i].className.indexOf(classname){
                         results[results.length]=eles[i];
                   }
             }         
             return results;    
      }
    }            
    

    3.4.6 盘点知识点


    文档中的每个元素都是一个对象,不仅如此,这些对象中的每一个还天生具有一系列非常有用的方法,这要归功于DOM.利用这些预先定义好的方法,我们不仅可以获得文档里任何一个对象的信息,甚至还可以改变元素的属性。

    下面是对本章此前学习内容的一个简要总结。

    1)一份文档就是一棵节点树。

    2)节点分为不同的类型:元素节点,属性节点和文本节点等。

    3)getElementById 将返回一个对象,该对象对应着文档里的一个特定的元素节点。

    4)getElementsByTagName 方法返回一个对象的数组,它们分别对应着文档里的一组特定的元素的节点。

    5)每个节点都是一个对象。

    天才在于积累,聪明在于勤奋!
  • 相关阅读:
    SNAT的作用是什么
    Maven命名规范收集
    Linux下Git命令中文显示乱码的问题解决:274232350256256346200273347273223
    HttpClient中文乱码问题排查
    Ubuntu 16.04通过NetworkManager(GUI)配置网桥
    HTML5 Video P2P技术研究(转)
    CentOS 6.9下KVM虚拟机快照创建、删除、恢复(转)
    CentOS 6.9下KVM虚拟机通过virt-clone克隆虚拟机(转)
    开源规则引擎 drools
    评估系统负载
  • 原文地址:https://www.cnblogs.com/zhaoxiaowu/p/3683657.html
Copyright © 2011-2022 走看看