<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)航:
     
    主站蜘蛛池模板: 8x成人永久免费视频| 18禁无遮挡无码国产免费网站| 日韩午夜免费视频| 亚洲av永久无码精品古装片| 成人福利免费视频| 亚洲欧洲日本精品| 色影音免费色资源| 在线综合亚洲欧洲综合网站| 日韩成人免费aa在线看| 一级毛片aaaaaa视频免费看| 亚洲线精品一区二区三区| 日本高清免费观看| 亚洲va乱码一区二区三区| 国产精品亚洲综合一区| 一区免费在线观看| 亚洲国产精品VA在线观看麻豆| 久久午夜羞羞影院免费观看| 亚洲精品国产精品乱码视色 | 成年18网站免费视频网站| 久久乐国产精品亚洲综合| 少妇亚洲免费精品| 国产在线19禁免费观看国产| 狼人大香伊蕉国产WWW亚洲 | 亚洲中文字幕久久精品无码喷水 | 一二三四视频在线观看中文版免费| 亚洲国产亚洲综合在线尤物| 无码国产精品一区二区免费 | 18禁网站免费无遮挡无码中文| 久久精品国产亚洲av品善| 亚洲av无码av制服另类专区| 午夜老司机免费视频| 久久久久久久99精品免费观看| 亚洲大尺度无码无码专线一区| 亚洲精品无码Av人在线观看国产| 日韩免费一级毛片| **实干一级毛片aa免费| 中文字幕不卡免费高清视频| 亚洲精品国产高清在线观看| 亚洲日韩乱码中文无码蜜桃| 伊人亚洲综合青草青草久热| 国产精品自在自线免费观看 |