《JavaScript权威指南》----第15章 脚本化文档(1) 学习记录

    15.3.1 作为节点树的文档

        Document对象,它的Element对象和文档中表示文本的Text对象都是Node对象。Node对象定义了以下重要的属性:

             parentNode:该节点的父节点,无则为null       childNodes:只读的类数组对象(NodeList对象),该节点的字节点的实时表示

             firstChild,lastChild:该节点的子节点中的第一个和左后一个,无则为null

             nextSibling,previousSibling:紧邻该节点的下一个兄弟节点和紧邻该节点的前一个兄弟节点                      

             nodeType:该节点的类型,9表示Document节点,1表示Element节点,3表示Text节点,8表示Comment节点,11表示DocumentFragment节点

             nodeValue:Text节点或者Comment节点的文本内容

             nodeName:元素标签名,以大写形式表示

   <!DOCTYPE html>
      <html lang="zh-hans">  
     <head>
     <title>Text</title>
     </head><body>Hello World!</body>
     </html>
     <script>
        window.onload = function(){
alert(document.childNodes[1].firstChild.nextSibling);
   };
    </script>   

    如果把<body>元素另起一行,alert出现的内容将是一个文本节点,不再是body节点,这是因为该API对文档文本的变化及其敏感,所以当只需要找到文档中的某一元素时,使用Element对象的API会更方便。

     15.3.2 作为元素树的文档

          当将主要的兴趣点集中在文档中的元素上而非他们之间的文本时,我们可以使用另外一个更有用的API。它将文档看做是Element对象树,忽略掉Text和Comment节点

          该API的第一部分是Element对象的children属性。类似ChildNodes,它也是一个NodeList对象,不同的是children列表只包含Element对象。children并非标准属性,但它在所有当前浏览器中都能工作。

          注意,Text和Comment节点没有children,它意味着上述Node.parentNode属性不可能返回Text或者Comment节点。任何ELement的parentNode总是另一个Element,或者是追溯到树根的Document或DocumentFragment节点。

       <!DOCTYPE html>
      <html lang="zh-hans">  
     <head>
     <title>Text</title>
     </head>

     <body>Hello World!</body>

     </html>
     <script>
        window.onload = function(){
 alert(document.children[0].firstElementChild.nextElementSibling);

    };
    </script>   

    当使用此API时,就算文档中有换行符或其他文本节点时,也依然能顺利访问到body元素。

    childElementCount:表示子元素的数量,返回的值和children.length值相等。

    

15.4 属性

  15.4.1 HTML属性作为Element的属性

     表示HTML文档元素的HTMLEelement对象定义了读/写属性,他们映射了元素的HTML属性。HTMLElement定义了通用的http属性(如lang),以及事件处理程序(如onclick)。

HTML属性名不区分大小写,但是JavaScript属性名则大小写敏感。有些HTML属性在JavaScript中是保留字,如<label>元素的for,在JavaScript中则变为htmlFor属性,class在

JavaScript中则变为className.

    注意,这个基于属性的API用来获取和设置属性值,但没有定义任何从元素中删除属性的方法。而且delete操作符也无法完成。

 15.4.2  获取和设置非标准HTML属性

     Element类型还定义了getAttribute()和setAttribute()来查询和设置非标准的HTML属性,也用来查询和设置XML文档中元素上的属性。

     Element类型还定义了hasAttribute()和removeAttribute(),它们用来检测命名属性是否存在和完全删除属性,这就能实现从元素中删除属性的目的。

  15.4.3 数据集(dataset)属性

    有时需要在HTML元素上绑定一些额外的信息,当JavaScript要选取这些元素并以某种方式操纵这些信息时就是很典型的情况。

    HTML5为此提供了一个解决方案,在HTML5中,任意以"data-"为前缀的小写的属性名字都是合法的。这些数据集属性将不会对其元素的表现产生影响。它们定义了

一个标准的,附加额外数据的方法。

   HTML5在Element对象上定义了一个dataset属性。该属性指代一个对象,它的各个属性对应于去掉前缀的data-属性。

     <!DOCTYPE html>
      <html lang="zh-hans">  
     <head>
     <title>Text</title>
     </head>
<body>Hello World!</body>
     <span class="sparkline" data-ymin="0" data-ymax="10">1 1 1 2 2 3 4 5 5 4 3 5 6 7 7 4 2 1</span>
</html>
     <script>
       var sparkline = document.getElementsByClassName("sparkline")[0];
       var dataset = sparkline.dataset;
  var ymin = parseFloat(dataset.ymin);
  var ymax = parseFloat(dataset.ymax);
  var data = sparkline.textContent.split(" ").map(parseFloat);
  alert(ymin+"|"+ymax+"|"+data);
    </script>   

   在测试时,IE10还没有支持此dataset属性,其他的主流浏览器都已经支持,这时可以用getAttribute()来解决此问题。

  15.4.4作为Attr节点的属性

    还有一种是使用Element的属性的方法。Node类型定义了attributes属性。针对非Element对象的任何节点,该属性为null。对于Element对象,

attributes属性是只读的类数组对象,它代表元素的所有属性。类似NodeList,attributes对象也是实时的。它可以用数字索引访问。这意味着可以

枚举元素的所有属性,并且,它也可以用属性名索引访问。

   当索引attributes对象时得到的是Attr对象。Attr对象时一类特殊的Node,但从来不会像Node对象一样去用,Attr对象的name和value属性返回

该属性的名字和值。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值