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

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

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

    離弦之Ray

      BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
      55 Posts :: 0 Stories :: 33 Comments :: 0 Trackbacks

    Chapter 6 DOM 基礎(chǔ)

           書的這章主要是圍繞document這個(gè)對(duì)象的使用來(lái)講的。Document對(duì)象既是BOM的一部分, 也是Html DOMHTMLDocument對(duì)象的一種表現(xiàn)形式,它也是XML DOM Document對(duì)象。JavaScript中的大部分處理DOM的過(guò)程都是用到了document對(duì)象。

    Document對(duì)象實(shí)現(xiàn)Node接口的主要的特性和方法:

     

    特性/方法

    類型/返回類型

    說(shuō)明

    nodeName

    String

    節(jié)點(diǎn)的名字

    nodeType

    Number

    節(jié)點(diǎn)的類型常量

    nodeValue

    String

    節(jié)點(diǎn)的值

    ownerDocument

    Document

    指向這個(gè)節(jié)點(diǎn)所屬的文檔

    firstChild

    Node

    指向childNodes列表中的第一個(gè)節(jié)點(diǎn)

    lastChild

    Node

    指向childNodes列表中的最后一個(gè)節(jié)點(diǎn)

    childNodes

    NodeList

    所有子節(jié)點(diǎn)的列表

    previousSibling

    Node

    指向前一個(gè)兄弟節(jié)點(diǎn)

    nextSibling

    Node

    指向后一個(gè)兄弟節(jié)點(diǎn)

    attributes

    NamedNodeMap

    包含了代表一個(gè)元素Attr對(duì)象, 僅用于Element

    appendChild  (node)

    Node

    node添加到childNodes

    remmoveChild (node)

    Node

    childNodes中除去

    replaceChildnewNode,oldNode

    Node

    childNodes中的oldNode替換成newNode

    insertBeforenewNode,refNode

    Node

    childNodes中的refNode前插入newNode

     

     

    1:檢測(cè)節(jié)點(diǎn)類型

           Node接口定義了對(duì)應(yīng)12種不同節(jié)點(diǎn)類型的常量

           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節(jié)點(diǎn)

        DOM又定義了3個(gè)元素訪問(wèn)方法來(lái)幫助訪問(wèn)特性

        getAttributename):

        setAttributenamenewValue):

        removeAttributename):

     

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

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

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

     

     

    3:訪問(wèn)指定節(jié)點(diǎn)

    getElementsByTagName

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

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

     

           可以使用一個(gè)星號(hào)的方法來(lái)獲取document中的所有元素

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

        但是據(jù)說(shuō)在IE6.0并不是返回所有的元素, 所以無(wú)論怎么樣還是用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”

     

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

           另外會(huì)返回ID等于給定名稱的元素

     

    getElmentById

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

          

    4:創(chuàng)建和操作節(jié)點(diǎn)

     

           createComment(text)

           createAttribute(name)

           createElement(tagName)

           createTextNode(text)

          

           appendChild(node)

           removeChild(node)

           replaceChild(newNode, oldNode)

           insertBeforenewNode,refNode

     

           createDocumentFragment  document添加大量的數(shù)據(jù)

        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 是對(duì)核心 DOM的擴(kuò)展,是專門針對(duì)html,讓一些DOM的操作更加的方便。

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

     

     

     

    6:遍歷

           NodeIterator

           TreeWalker

           可惜IE不支持, 先不寫了

     

     

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

    我寫的遍歷html頁(yè)面, 構(gòu)造出一棵XML樹(shù) 的示例代碼

     

    File xmlTree.js

    //遍歷整個(gè)html文檔, 構(gòu)造出xml樹(shù)

    //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

        }

    }

     

    //打印出縮進(jìn)符號(hào), 為了顯示出層次關(guān)系

    function showTag(offset){

        var i =0;

        for(; i < offset; i++)

           sTree[index++] = sTag;

    }

     

     

    //根據(jù)節(jié)點(diǎn)的不同類型,打印出節(jié)點(diǎn)內(nèi)容, offset為縮進(jìn)值

    function displayNode(node,offset){

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

           return;

        switch(node.nodeType){//根據(jù)節(jié)點(diǎn)類型, 做不同處理

           case Node.ELEMENT_NODE:

               showTag(offset);

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

               //如果該節(jié)點(diǎ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://這邊省去了很多其它節(jié)點(diǎn)類型的處理,就直接顯示了下nodeName

               showTag(offset);

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

        }  

    }

     

    //遞歸構(gòu)造出XML樹(shù)

    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會(huì)被當(dāng)成全局變量!!!

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

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

           }  

        }     

    }

     

    function testCreateTree(){ 

        /**新打開(kāi)一個(gè)窗口,執(zhí)行

        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;

        */

       

        //在原窗口執(zhí)行

        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的技術(shù)天空 閱讀(429) 評(píng)論(2)  編輯  收藏 所屬分類: JavaScript

    Feedback

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

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


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲成人免费在线| 成人免费777777被爆出| 1000部拍拍拍18免费网站| 久久亚洲精品中文字幕无码 | 国产亚洲一区二区精品| 又长又大又粗又硬3p免费视频| 暖暖日本免费在线视频| 国产成人亚洲综合a∨| 无码专区一va亚洲v专区在线| 免费人成网站永久| 亚洲中文字幕在线乱码| 久操视频免费观看| 亚洲国产美女精品久久| 精品少妇人妻AV免费久久洗澡 | 亚洲色无码专区在线观看| 中文字幕高清免费不卡视频| 亚洲精品乱码久久久久久| 热re99久久6国产精品免费| 亚洲成人网在线观看| 成人毛片免费播放| 免费人成视频在线播放| 亚洲毛片αv无线播放一区| 777爽死你无码免费看一二区 | 亚洲一级毛片免费观看| 午夜色a大片在线观看免费| 添bbb免费观看高清视频| 国产亚洲老熟女视频| 97在线视频免费播放| 亚洲AV综合色区无码二区偷拍 | 国产亚洲精品VA片在线播放| 波多野结衣久久高清免费 | 免费国产在线精品一区| 亚洲久本草在线中文字幕| 拍拍拍又黄又爽无挡视频免费| 麻豆亚洲AV成人无码久久精品 | 国产成人精品亚洲日本在线| 国产免费黄色大片| 久久国产免费一区二区三区| 色偷偷亚洲女人天堂观看欧| 亚洲综合久久夜AV | 0588影视手机免费看片|