<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    離弦之Ray

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      55 Posts :: 0 Stories :: 33 Comments :: 0 Trackbacks

    Chapter 6 DOM 基礎

           書的這章主要是圍繞document這個對象的使用來講的。Document對象既是BOM的一部分, 也是Html DOMHTMLDocument對象的一種表現形式,它也是XML DOM Document對象。JavaScript中的大部分處理DOM的過程都是用到了document對象。

    Document對象實現Node接口的主要的特性和方法:

     

    特性/方法

    類型/返回類型

    說明

    nodeName

    String

    節點的名字

    nodeType

    Number

    節點的類型常量

    nodeValue

    String

    節點的值

    ownerDocument

    Document

    指向這個節點所屬的文檔

    firstChild

    Node

    指向childNodes列表中的第一個節點

    lastChild

    Node

    指向childNodes列表中的最后一個節點

    childNodes

    NodeList

    所有子節點的列表

    previousSibling

    Node

    指向前一個兄弟節點

    nextSibling

    Node

    指向后一個兄弟節點

    attributes

    NamedNodeMap

    包含了代表一個元素Attr對象, 僅用于Element

    appendChild  (node)

    Node

    node添加到childNodes

    remmoveChild (node)

    Node

    childNodes中除去

    replaceChildnewNode,oldNode

    Node

    childNodes中的oldNode替換成newNode

    insertBeforenewNode,refNode

    Node

    childNodes中的refNode前插入newNode

     

     

    1:檢測節點類型

           Node接口定義了對應12種不同節點類型的常量

           Node.ELEMENT_NODE       1

           Node.ATTRIBUTE_NODE    2

           Node.TEXT_NODE      3

           Node.CDATA_SECTION_NODE  4

           Node.ENTITY_REFERENCE_NODE   5

           Node.ENTITY_NODE   6

           Node.PROCESSING_INSTRUCTION_NODE    7

           Node.COMMENT_NODE     8

           Node.DOCUMENT_NODE   9

           Node.DOCUMENT_TYPE_NODE       10

           Node.DOCUMENT_FRAGMENT_NODE    11

           Node.NOTATION_NODE     12

           注意:在IE中不支持這些常量, 但是可以自己定義:

           if(typeof Node == "undefined"){

        var Node = {

            ELEMENT_NODE:1,

            ATTRIBUTE_NODE:2,

            TEXT_NODE:3,

            CDATA_SECTION_NODE:4,

            ENTITY_REFERENCE_NODE:5,

            ENTITY_NODE:6,

            PROCESSING_INSTRUCTION_NODE:7,

            COMMENT_NODE:8,

            DOCUMENT_NODE:9,

            DOCUMENT_TYPE_NODE:10,

            DOCUMENT_FRAGMENT_NODE:11,

            NOTATION_NODE:12

            }

        }

        alert(document.nodeType == Node.DOCUMENT_NODE);//output true

        alert(document.documentElement.nodeType == Node.ELEMENT_NODE);

     

     

    2:處理特性

        getNamedItemname:

        removeNamedItem (name):
        setNamedItem (node):

        item(pos):

      這些方法返回的都是Attr節點

        DOM又定義了3個元素訪問方法來幫助訪問特性

        getAttributename):

        setAttributenamenewValue):

        removeAttributename):

     

        getAttribute(name) 等同 attributes.getNamedItem(name).nodeValue;

        setAttribute(name, newValue) 等同 attributes.getNamedItem(name).nodevalue = newValue;

        removeAttribute(name) 等同 attributes.removeNamedItem(name);

     

     

    3:訪問指定節點

    getElementsByTagName

           獲取某個頁面第一個段落的所有圖象:
          
    var oPs = document.getElementsByTagName("p");

        var oImgsInP = oPs[0].getelmentsByTagName("img");

     

           可以使用一個星號的方法來獲取document中的所有元素

           var oAllElements = document.getElementsByTagName("*");

        但是據說在IE6.0并不是返回所有的元素, 所以無論怎么樣還是用document.all最好了。

     

    getElementsByName

    示例:

           html片段:

           ……

           <input type="radio" name="radColor" value="red"/> Red

        <input type="radio" name="radColor" value="green"/> Green

        <input type="radio" name="radColor" value="blue"/> Blue

        ……

     

        var oRadios = document.getElementsByName("radColor");

        alert(oRadios[0].getAttribute("value")); //output “red”

     

           這個方法在IE中只能適用于</input>,<img/>

           另外會返回ID等于給定名稱的元素

     

    getElmentById

           id特性是唯一的, 因此這種方法是提取單個指定元素的最好的方法

          

    4:創建和操作節點

     

           createComment(text)

           createAttribute(name)

           createElement(tagName)

           createTextNode(text)

          

           appendChild(node)

           removeChild(node)

           replaceChild(newNode, oldNode)

           insertBeforenewNode,refNode

     

           createDocumentFragment  document添加大量的數據

        var oFragment = document.createAttribute();

        var oP = document.createElement("p");

        var oText = document.createTextNode("Hello");

        oP.appendChild(oText);

        oFragment.append(oP);

        document.body.appendChild(oFragment);

     

     

    5Html DOM

           Html DOM 是對核心 DOM的擴展,是專門針對html,讓一些DOM的操作更加的方便。

        http://www.w3schools.com/htmldom/dom_reference.asp

     

     

     

    6:遍歷

           NodeIterator

           TreeWalker

           可惜IE不支持, 先不寫了

     

     

    =======================================

    我寫的遍歷html頁面, 構造出一棵XML 的示例代碼

     

    File xmlTree.js

    //遍歷整個html文檔, 構造出xml

    //generate an XML tree for the whole html document.

     

     

    var sTree = new Array;

    var index = 0;

    var nodeTypes = ["ELEMENT_NODE",

                  "ATTRIBUTE_NODE",

                  "TEXT_NODE",

                  "CDATA_SECTION_NODE",

                  "ENTITY_REFERENCE_NODE",

                  "ENTITY_NODE",

                  "PROCESSING_INSTRUCTION_NODE",

                  "COMMENT_NODE",

                  "DOCUMENT_NODE",

                  "DOCUMENT_TYPE_NODE",

                  "DOCUMENT_FRAGMENT_NODE",

                  "NOTATION_NODE"];

    var sTag = "\t";

     

    if(typeof Node == "undefined"){

        var Node = {

        ELEMENT_NODE:1,

        ATTRIBUTE_NODE:2,

        TEXT_NODE:3,

        CDATA_SECTION_NODE:4,

        ENTITY_REFERENCE_NODE:5,

        ENTITY_NODE:6,

        PROCESSING_INSTRUCTION_NODE:7,

        COMMENT_NODE:8,

        DOCUMENT_NODE:9,

        DOCUMENT_TYPE_NODE:10,

        DOCUMENT_FRAGMENT_NODE:11,

        NOTATION_NODE:12

        }

    }

     

    //打印出縮進符號, 為了顯示出層次關系

    function showTag(offset){

        var i =0;

        for(; i < offset; i++)

           sTree[index++] = sTag;

    }

     

     

    //根據節點的不同類型,打印出節點內容, offset為縮進值

    function displayNode(node,offset){

        if(node == null || node == "undefined")

           return;

        switch(node.nodeType){//根據節點類型, 做不同處理

           case Node.ELEMENT_NODE:

               showTag(offset);

               sTree[index++] = nodeTypes[node.nodeType-1]+":"+node.nodeName+node.childNodes.length+"\n";

               //如果該節點有屬性,則顯示出所有的屬性值

               if(node.attributes.length>0){

                  var ii = 0;

                  for(;ii<node.attributes.length;ii++){

                      showTag(offset+1);

                      sTree[index++] = nodeTypes[node.nodeType-1]+": "+

                                     node.attributes.item(ii).nodeName+": "+

                                     node.attributes.item(ii).nodeValue+"\n";

                  }

               }

               break;

           case Node.TEXT_NODE:

               if(node.data !=null && node.data.length>=1){//除去空文本的值

                  showTag(offset);           

                  sTree[index++] = nodeTypes[node.nodeType-1]+":"+node.data+"\n";      

               }         

               break;    

           default://這邊省去了很多其它節點類型的處理,就直接顯示了下nodeName

               showTag(offset);

               sTree[index++] = nodeTypes[node.nodeType-1]+":"+node.nodeName+"\n";         

        }  

    }

     

    //遞歸構造出XML

    function createTree(current,offset){

        displayNode(current,offset);

        var childs = current.childNodes;

        if(childs != null && childs.length > 0){

           var ii = 0;   //定義ii很重要,如果for(ii=0;ii<childs.length;ii++)的話,ii會被當成全局變量?。。?/span>

           for(; ii < childs.length; ii++){      

               createTree(childs[ii],offset+1);

           }  

        }     

    }

     

    function testCreateTree(){ 

        /**新打開一個窗口,執行

        var oNewWindow = window.open("about:blank","newwindow");

        oNewWindow.document.open();

        oNewWindow.document.write("<html><head><title></title></head>" +

                               "<body>Hello" +

                               "<p style=\"color:red\" id=\"p1\">Hello,p</p>" +

                               "</body></html>");

        oNewWindow.document.close();

        var oHtml = oNewWindow.document.documentElement;

        */

       

        //在原窗口執行

        var oHtml = document.documentElement; 

        if(oHtml == null)

           alert("No Html docuemtn!!!");  

        createTree(oHtml,0);

        alert(sTree.join('').toString());

    }

     

    testCreateTree();

     

     

     

     

    posted on 2008-01-04 20:29 離弦之ray的技術天空 閱讀(429) 評論(2)  編輯  收藏 所屬分類: JavaScript

    Feedback

    # re: Professional JavaScript For Web Developers(Chapter 6)[未登錄] 2008-01-05 21:08 ray
    test 回復通知  回復  更多評論
      

    # re: Professional JavaScript For Web Developers(Chapter 6) 2008-01-05 21:13 建建
    辛苦拉~~  回復  更多評論
      


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲AV无码一区二区三区系列| 亚洲精品第一综合99久久| 最近中文字幕mv免费高清在线| 国产精品亚洲精品| 亚洲国产精品国产自在在线| 午夜精品射精入后重之免费观看| 亚洲一区AV无码少妇电影| 亚洲人成无码www久久久| 在线观看永久免费| 免费无遮挡无码视频在线观看 | 亚洲综合无码AV一区二区| 日本免费网址大全在线观看| 色妞www精品视频免费看| 亚洲美女色在线欧洲美女| 亚洲а∨天堂久久精品| **一级毛片免费完整视| 人碰人碰人成人免费视频| 久久久久se色偷偷亚洲精品av| 亚洲综合另类小说色区| 大香人蕉免费视频75| 青青草原1769久久免费播放| 日日摸日日碰夜夜爽亚洲| 亚洲国产综合在线| 亚洲日韩精品一区二区三区 | 黄色免费在线网站| 亚洲av无码一区二区三区人妖| 亚洲欧洲日韩不卡| 亚洲午夜AV无码专区在线播放 | 真实乱视频国产免费观看| 亚欧免费一级毛片| 一本到卡二卡三卡免费高| 亚洲久热无码av中文字幕| 亚洲国产精品乱码在线观看97 | 亚洲AV无码资源在线观看| 亚洲精品乱码久久久久久下载| 国产亚洲色婷婷久久99精品 | 国产成人亚洲精品91专区高清| 亚洲免费观看网站| 亚洲人成在线影院| 亚洲av综合av一区| 亚洲开心婷婷中文字幕|