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

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

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

    隨筆-314  評論-209  文章-0  trackbacks-0
    <script?language="JavaScript">
    <!--
    var?doc?=?new?ActiveXObject("Msxml2.DOMDocument");?//ie5.5+,CreateObject("Microsoft.XMLDOM")?


    //加載文檔
    //
    doc.load("b.xml");

    //創建文件頭
    var?p?=?doc.createProcessingInstruction("xml","version='1.0'??encoding='gb2312'");

    ????
    //添加文件頭
    ????doc.appendChild(p);

    //用于直接加載時獲得根接點
    //
    var?root?=?doc.documentElement;

    //兩種方式創建根接點
    //
    ????var?root?=?doc.createElement("students");
    ????var?root?=?doc.createNode(1,"students","");

    ????
    //創建子接點
    ????var?n?=?doc.createNode(1,"ttyp","");

    ????????
    //指定子接點文本
    ????????//n.text?=?"?this?is?a?test";
    ????
    ????
    //創建孫接點
    ????var?o?=?doc.createElement("sex");
    ????????o.text?
    =?"";????//指定其文本

    ????
    //創建屬性
    ????var?r?=?doc.createAttribute("id");
    ????????r.value
    ="test";

    ????????
    //添加屬性
    ????????n.setAttributeNode(r);

    ????
    //創建第二個屬性????
    ????var?r1?=?doc.createAttribute("class");
    ????????r1.value
    ="tt";
    ????????
    ????????
    //添加屬性
    ????????n.setAttributeNode(r1);

    ????????
    //刪除第二個屬性
    ????????n.removeAttribute("class");

    ????????
    //添加孫接點
    ????????n.appendChild(o);

    ????????
    //添加文本接點
    ????????n.appendChild(doc.createTextNode("this?is?a?text?node."));

    ????????
    //添加注釋
    ????????n.appendChild(doc.createComment("this?is?a?comment\n"));
    ????
    ????????
    //添加子接點
    ????????root.appendChild(n);
    ????
    ????
    //復制接點
    ????var?m?=?n.cloneNode(true);

    ????????root.appendChild(m);
    ????????
    ????????
    //刪除接點
    ????????root.removeChild(root.childNodes(0));

    ????
    //創建數據段
    ????var?c?=?doc.createCDATASection("this?is?a?cdata");
    ????????c.text?
    =?"hi,cdata";
    ????????
    //添加數據段
    ????????root.appendChild(c);
    ????
    ????
    //添加根接點
    ????doc.appendChild(root);

    ????
    //查找接點
    ????var?a?=?doc.getElementsByTagName("ttyp");
    ????
    //var?a?=?doc.selectNodes("http://ttyp");

    ????
    //顯示改接點的屬性
    ????for(var?i=?0;i<a.length;i++)
    ????
    {
    ????????alert(a[i].xml);
    ????????
    for(var?j=0;j<a[i].attributes.length;j++)
    ????????
    {
    ????????????alert(a[i].attributes[j].name);
    ????????}

    ????}


    ????
    //修改節點,利用XPATH定位節點
    ????var?b?=?doc.selectSingleNode("//ttyp/sex");
    ????b.text?
    =?"";

    ????
    //alert(doc.xml);

    ????
    //XML保存(需要在服務端,客戶端用FSO)
    ????//doc.save();
    ????
    ????
    //查看根接點XML
    ????if(n)
    ????
    {
    ????????alert(n.ownerDocument.xml);
    ????}


    //-->
    </script>

    7.4、文檔對象模型(DOM)
      文檔對象模型(DOM)是表示文檔(比如HTML和XML)和訪問、操作構成文檔的各種元素的應用程序接口(API)。一般的,支持Javascript的所有瀏覽器都支持DOM。本文所涉及的DOM,是指W3C定義的標準的文檔對象模型,它以樹形結構表示HTML和XML文檔,定義了遍歷這個樹和檢查、修改樹的節點的方法和屬性。

    7.4.1、DOM眼中的HTML文檔:樹
      在DOM眼中,HTML跟XML一樣是一種樹形結構的文檔,<html>是根(root)節點,<head>、<title>、<body>是<html>的子(children)節點,互相之間是兄弟(sibling)節點;<body>下面才是子節點<table>、<span>、<p>等等。如下圖:

      

      這個是不是跟XML的結構有點相似呢。不同的是,HTML文檔的樹形主要包含表示元素、標記的節點和表示文本串的節點。

    7.4.2、HTML文檔的節點
      DOM下,HTML文檔各個節點被視為各種類型的Node對象。每個Node對象都有自己的屬性和方法,利用這些屬性和方法可以遍歷整個文檔樹。由于HTML文檔的復雜性,DOM定義了nodeType來表示節點的類型。這里列出Node常用的幾種節點類型:
    接口nodeType常量nodeType值備注
    ElementNode.ELEMENT_NODE1元素節點
    TextNode.TEXT_NODE3文本節點
    DocumentNode.DOCUMENT_NODE9document
    CommentNode.COMMENT_NODE8注釋的文本
    DocumentFragmentNode.DOCUMENT_FRAGMENT_NODE11document片斷
    AttrNode.ATTRIBUTE_NODE2節點屬性

      DOM樹的根節點是個Document對象,該對象的documentElement屬性引用表示文檔根元素的Element對象(對于HTML文檔,這個就是<html>標記)。Javascript操作HTML文檔的時候,document即指向整個文檔,<body>、<table>等節點類型即為Element。Comment類型的節點則是指文檔的注釋。具體節點類型的含義,請參考《Javascript權威指南》,在此不贅述。

      Document定義的方法大多數是生產型方法,主要用于創建可以插入文檔中的各種類型的節點。常用的Document方法有:

    方法描述
    createAttribute()用指定的名字創建新的Attr節點。
    createComment()用指定的字符串創建新的Comment節點。
    createElement()用指定的標記名創建新的Element節點。
    createTextNode()用指定的文本創建新的TextNode節點。
    getElementById()返回文檔中具有指定id屬性的Element節點。
    getElementsByTagName()返回文檔中具有指定標記名的所有Element節點。

      對于Element節點,可以通過調用getAttribute()、setAttribute()、removeAttribute()方法來查詢、設置或者刪除一個Element節點的性質,比如<table>標記的border屬性。下面列出Element常用的屬性:

    屬性描述
    tagName元素的標記名稱,比如<p>元素為P。HTML文檔返回的tabName均為大寫。

      Element常用的方法:

    方法描述
    getAttribute()以字符串形式返回指定屬性的值。
    getAttributeNode()以Attr節點的形式返回指定屬性的值。
    getElementsByTabName()返回一個Node數組,包含具有指定標記名的所有Element節點的子孫節點,其順序為在文檔中出現的順序。
    hasAttribute()如果該元素具有指定名字的屬性,則返回true。
    removeAttribute()從元素中刪除指定的屬性。
    removeAttributeNode()從元素的屬性列表中刪除指定的Attr節點。
    setAttribute()把指定的屬性設置為指定的字符串值,如果該屬性不存在則添加一個新屬性。
    setAttributeNode()把指定的Attr節點添加到該元素的屬性列表中。

      Attr對象代表文檔元素的屬性,有name、value等屬性,可以通過Node接口的attributes屬性或者調用Element接口的getAttributeNode()方法來獲取。不過,在大多數情況下,使用Element元素屬性的最簡單方法是getAttribute()和setAttribute()兩個方法,而不是Attr對象。

    7.4.3、使用DOM操作HTML文檔
      Node對象定義了一系列屬性和方法,來方便遍歷整個文檔。用parentNode屬性和childNodes[]數組可以在文檔樹中上下移動;通過遍歷childNodes[]數組或者使用firstChild和nextSibling屬性進行循環操作,也可以使用lastChild和previousSibling進行逆向循環操作,也可以枚舉指定節點的子節點。而調用appendChild()、insertBefore()、removeChild()、replaceChild()方法可以改變一個節點的子節點從而改變文檔樹。

      需要指出的是,childNodes[]的值實際上是一個NodeList對象。因此,可以通過遍歷childNodes[]數組的每個元素,來枚舉一個給定節點的所有子節點;通過遞歸,可以枚舉樹中的所有節點。下表列出了Node對象的一些常用屬性和方法:

      Node對象常用屬性:

    屬性描述
    attributes如果該節點是一個Element,則以NamedNodeMap形式返回該元素的屬性。
    childNodes以Node[]的形式存放當前節點的子節點。如果沒有子節點,則返回空數組。
    firstChild以Node的形式返回當前節點的第一個子節點。如果沒有子節點,則為null。
    lastChild以Node的形式返回當前節點的最后一個子節點。如果沒有子節點,則為null。
    nextSibling以Node的形式返回當前節點的兄弟下一個節點。如果沒有這樣的節點,則返回null。
    nodeName節點的名字,Element節點則代表Element的標記名稱。
    nodeType代表節點的類型。
    parentNode以Node的形式返回當前節點的父節點。如果沒有父節點,則為null。
    previousSibling以Node的形式返回緊挨當前節點、位于它之前的兄弟節點。如果沒有這樣的節點,則返回null。

      Node對象常用方法:

    方法描述
    appendChild()通過把一個節點增加到當前節點的childNodes[]組,給文檔樹增加節點。
    cloneNode()復制當前節點,或者復制當前節點以及它的所有子孫節點。
    hasChildNodes()如果當前節點擁有子節點,則將返回true。
    insertBefore()給文檔樹插入一個節點,位置在當前節點的指定子節點之前。如果該節點已經存在,則刪除之再插入到它的位置。
    removeChild()從文檔樹中刪除并返回指定的子節點。
    replaceChild()從文檔樹中刪除并返回指定的子節點,用另一個節點替換它。

      接下來,讓我們使用上述的DOM應用編程接口,來試著操作HTML文檔。

    posted on 2006-06-22 12:28 xzc 閱讀(980) 評論(0)  編輯  收藏 所屬分類: XML
    主站蜘蛛池模板: 国产一区二区三区无码免费| 青青操免费在线观看| 在线观看成人免费视频不卡| 亚洲av中文无码乱人伦在线播放| h在线看免费视频网站男男| 可以免费观看的一级毛片| 国产产在线精品亚洲AAVV| 免费观看一级毛片| 亚洲色成人WWW永久在线观看| 成年轻人网站色免费看| 亚洲s码欧洲m码吹潮| 国产国产人免费人成免费视频| 亚洲成AV人影片在线观看| 免费一级一片一毛片| 国产黄在线观看免费观看不卡| 日韩亚洲欧洲在线com91tv| 免费女人高潮流视频在线观看| 亚洲网站在线播放| 妞干网免费视频在线观看| 亚洲精华国产精华精华液好用| 国产伦一区二区三区免费| yy一级毛片免费视频| 国产精品亚洲а∨无码播放| 久章草在线精品视频免费观看| 91亚洲国产成人久久精品网站 | 精品丝袜国产自在线拍亚洲| 成人黄软件网18免费下载成人黄18免费视频 | 亚洲国产午夜福利在线播放| 国产精品免费看久久久香蕉| 久久亚洲中文字幕精品有坂深雪| 永久免费的网站在线观看| 看免费毛片天天看| 亚洲成AV人在线播放无码| 精品久久久久久久久免费影院| 国产区图片区小说区亚洲区| 久久夜色精品国产亚洲AV动态图| 久久久久国产精品免费免费搜索 | 免费在线观看的黄色网址| 国内精品免费视频精选在线观看| 亚洲一区二区三区在线观看网站| 亚洲性久久久影院|