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

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

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

    §封Ja葬va§

    Dom技術基礎

    DOM技術
    DOM Level1:對文檔節點進行訪問以及增,刪,改
    Node接口定義了一些所有節點類型都包含的特性和方法

    1.訪問相關節點

    <html>
    <head>
        <title>DOM Example</title>
    </head>
    <body>
        <p>Hello World!</p>
        <p>Isn't this exciting!</p>
        <p>You're learning to use the DOM!</p>
    </body>
    </html>

    訪問<html/>元素:
    var oHtml = document.documentElement;

    取得<head/>元素:
    var oHead = oHtml.firstChild; /
    var oHead = oHtml.childNodes[0]; /
    var oHead = oHtml.childNodes.item(0);

    取得<body/>元素:
    var oBody = document.body;
    var oBody = oHtml.lastChild; /
    var oBody = oHtml.childNodes[1]; /
    var oBody = oHtml.childNodes.item(1);

    取得子節點數量:
    var length = oHead.childNodes.length;

    確定<html/> <head/> <body/>之間的關系:
    alert(oHead.parentNode == oHtml);       //outputs "true"
    alert(oBody.parentNode == oHtml);       //outputs "true"
    alert(oHead.nextSubling == oBody);      //outputs "true"
    alert(oBody.previousSubling == oHead); //outputs "true"
    alert(oHead.ownerDocument == document); //outputs "true"



    2.處理特性

    <p style="color:red" id="p1">Hello world!</p>

    獲取id特性值:
    var oP = document.getElementById("p1");
    var sId = oP.getAttribute("id"); 或
    var sId = oP.attributes.getNamedItem("id").nodeValue; 或
    var sId = oP.attributes.item(1).nodeValue;

    設置id特性值:
    var oP = document.getElementById("p1");
    oP.setAttribute("id") = "newId";
    oP.attributes.getNamedItem("id").nodeValue = "newId";
    oP.attributes.item(1).nodeValue = "newId";



    3.訪問指定節點

    3.1)XML DOM的getElementByTagName();

    獲取文檔中第3個img元素:
    var oImgs = document.getElementByTagName("img");
    var oneImg = oImgs[2];或
    var oneImg = oImgs.item(2);

    獲取頁面第一段落的所有圖像:
    var oP = document.getElementByTagName("p").item(0);
    var oImgs = oP.getElementByTagName("img");

    3.2)HTML DOM的getElementByName();

    <html>
    <head>DOM Example</head>
    <body>
        <form method="post" action="dosomething.cgi">
          <fieldset>
            <legend>What color do you like?</legend>
            <input type="radio" name="radColor" value="red"/>Red<br/>
            <input type="radio" name="radColor" value="Green"/>Green<br/>
            <input type="radio" name="radColor" value="Blue"/>Blue<br/>
          </fieldset>
        </form>
    </body>
    </html>

    獲得所有單選按鈕的引用:var oRadios = document.getElementByName("radColor");
    獲得單個單選按鈕的顏色:alert(oRadios[0].getArrribute("value")); //outputs "Red"

    3.3)HTML DOM的getElementById()

    <html>
    <head>DOM Example</head>
    <body>
        <p>Hello World!</p>
        <div id="div1">This is my first layer</div>
    </body>
    </html>

    訪問id為"div1"的</div>元素:

    HTML DOM
    var oDiv1 = document.getElementById("div1"); /
    XML DOM
    var oDivs = document.getElementByTagName("div");
    var oDiv1 = null;
    for(int i=0; i<oDivs.length; i++){
        if(oDivs[i].getAttribute("id") == "div1"){
            oDiv1 = oDivs[i];
            break;
        }
    }

     

    4創建和操作節點

    假設有如下頁面:

    <html>
    <head>
        <title>createElement() Example</title>
    </head>
    <body>
    </body>
    </html>

    4.1)createElement()、createTextNode()、appendChild()

    使用DOM添加<p>Hello World!</p>到這個頁面中:
    <html>
    <head>
        <title>createElement() Example</title>
        <script type="text/javascript">
            function createMessage(){
                var oP = document.createElement("p");
                var oText = document.createTextNode("Hello World!");
                oP.appendChild(oText);
                document.body.appendChild(oP);
            }
        </script>
    </head>
    <body onload="createMessage()">
    </body>
    </html>

    4.2)removeChild()
    假設已有一個包含Hello World!消息的頁面.
    移除消息:

    <html>
    <head>
        <title>removeChild() Example</title>
        <script type="text/javascript">
            function removeMessage(){
                var oPs = document.getElementByTagName("p");
                var oP = oPs[0];
                oP.parentNode.removeChild(oP)
            }
        </script>
    </head>
    <body onload="removeMessage()">
        <p>Hello World!</p>
    </body>
    </html>

    4.3)replaceChild()

    假設已有一個包含Hello World!消息的頁面.
    用<p>Hello Universe!</p>替換消息:

    <html>
    <head>
        <title>replaceChild() Example</title>
        <script type="text/javascript">
            function replaceMessage(){
                var oNewP = document.createElement("p");
                var oText = document.createTextNode("Hello Universe!");
                oNewP.appendChild(oText);
                var oOldP = document.getElementByTagName("p")[0];
                oOldP.parentNode.replaceChild(oNewP,oOldP);
            }
        </script>
    </head>
    <body onload="replaceMessage()">
        <p>Hello World!</p>
    </body>
    </html>

    4.4)insertBefore()

    假設已有一個包含Hello World!消息的頁面.
    讓<p>Hello Universe!</p>出現在此消息之前:

    <html>
    <head>
        <title>insertBefore() Example</title>
        <script type="text/javascript">
            function insertMessage(){
                var oNewP = document.createElement("p");
                var oText = document.createTextNode("Hello Universe!");
                oNewP.appendChild(oText);
                var oOldP = document.getElementByTagName("p")[0];
                oOldP.parentNode.insertBefore(oNewP,oOldP);
            }
        </script>
    </head>
    <body onload="replaceMessage()">
        <p>Hello World!</p>
    </body>
    </html>

    4.5)createDocumentFragment()

    一次刷屏代替多次刷屏
    var arrText = ["first","second","third","fourth","fifth"];
    var oFragment = document.createDocumentFragment();

    for(var i=0;i<arrText.length;i++){
    var oP = document.createElement("p");
    var oText = document.createTextNode(arrText[i]);
    oP.appendChild(oText);
    oFragment.appendChild(oP);
    }

    document.body.appendChild(oFragment.appendChild(oFragment));

    這里對appendChild()的調用實際上并不是把文檔碎片節點本身追加到</body>元素中;而是僅僅追加碎片中的子節點。

    調用document.body.appendChild()一次代替十次,這意味著只需要進行一次刷屏.

     

    5 HTML DOM特征功能

    5.1)讓特性像屬性一樣

    <img src="mypicture.jpg" border="0"/>

    使用XML DOM獲取和設置src和border特性,要用getAttribute()和setAttribute()方法:
    alert(oImg.getAttribute("src"));
    alert(oImg.getAttribute("border"));
    oImg.setAttribute("src","mypicture2.jsp")
    oImg.setAttribute("border","1");

    使用HTML DOM,可以使用同樣名稱的屬性來獲取和設置這些值:
    alert(oImg.src);
    alert(oImg.border);
    oImg.src="mypicture2.jsp";
    oImg.border="1";

    特性名和屬性名不一樣的特例:(因為class是個保留字)
    <div class="header"></div>
    alert(oDiv.className);
    oDiv.className="footer";

    注:IE在setAttribute()上有個很大的問題,當你使用它時,變更并不會總是正確地反應出來。
    如果使用IE,最好盡可能用屬性

    5.2)table方法

    假設想使用DOM來創建如下HTML表格:
    <table border="1" width="100%">
    <tbody>
        <tr>
          <td>Cell 1,1</td>
          <td>Cell 1,2</td>
        </tr>
        <tr>
          <td>Cell 2,1</td>
          <td>Cell 2,2</td>
        </tr>
    </tbody>
    </table>

    通過XML DOM完成:

    //create the table
    var oTable = document.createElement("table");
    oTable.setAttribute("border","1");
    oTable.setAttribute("width","100%");

    //create the tbody
    var oTBody = document.createElement("tbody");
    oTable.appendChild(oTBody);

    //create the first row
    var oTR1 = document.createElement("tr");
    oTBody.appendChild(oTR1);
    var oTD11 = document.createElement("td");
    oTD11.appendChild(document.createTextNode("Cell 1,1"));
    oTR1.appendChild(oTD11);
    var oTD12 = document.createElement("td");
    oTD12.appendChild(document.createTextNode("Cell 1,2"));
    oTR1.appendChild(oTD12);

    //create the second row
    var oTR2 = document.createElement("tr");
    oTBody.appendChild(oTR2);
    var oTD21 = document.createElement("td");
    oTD21.appendChild(document.createTextNode("Cell 2,1"));
    oTR2.appendChild(oTD21);
    var oTD22 = document.createElement("td");
    oTD22.appendChild(document.createTextNode("Cell 2,2"));
    oTR2.appendChild(oTD22);

    //add the table to the document body
    document.body.appendChild(oTable);


    這段代碼十分冗長且有些難以理解。

    為了協助建立表格,HTML DOM給<table/>、<tbody/>和</tr>添加了一些特性和方法

    通過HTML DOM完成:

    //create the table
    var oTable = document.createElement("table");
    oTable.border = "1";
    oTable..width = "100%";

    //create the body
    var oTBdoy = document.createElement("tbody");
    oTable.appendChild(oTBody);

    //create the first row
    oTBody.inserRow(0);
    oTBody.rows[0].inserCell(0);
    oTBody.rows[0].cells[0].appendChild(document.createTextNode("Cell 1,1"));
    oTBody.rows[0].inserCell(1);
    oTBody.rows[0].cells[1].appendChild(document.createTextNode("Cell 1,2"));

    //create the second row
    oTBody.inserRow(1);
    oTBody.rows[1].inserCell(0);
    oTBody.rows[1].cells[0].appendChild(document.createTextNode("Cell 2,1"));
    oTBody.rows[1].inserCell(1);
    oTBody.rows[1].cells[1].appendChild(document.createTextNode("Cell 2,2"));

    //add the table to the document body
    document.body.appendChild(oTable);
    雖然從技術角度來說,兩種代碼都是正確的,
    但是使用這些特性和方法來創建表格使得代碼變得更加有邏輯且更加易讀

    DOM Level2 遍歷DOM樹(Mozilla才有)
    DOM Level3 瀏覽器未實現(Mozilla實現一部分)

    posted on 2009-03-06 09:11 §朱家二少§ 閱讀(418) 評論(0)  編輯  收藏 所屬分類: JavaScript


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


    網站導航:
     
    主站蜘蛛池模板: 99久久婷婷国产综合亚洲| 久久久久亚洲AV无码网站| 亚洲国产精品精华液| 日韩一区二区a片免费观看| 亚洲欧洲日本精品| 1000部羞羞禁止免费观看视频| 亚洲综合久久综合激情久久| 一级毛片不卡片免费观看| 亚洲五月激情综合图片区| 最近中文字幕大全免费视频 | 亚洲综合精品网站在线观看| 一级中文字幕乱码免费| 亚洲色欲色欲www在线丝| a级毛片免费观看视频| 91久久亚洲国产成人精品性色 | 大地影院MV在线观看视频免费| 伊人久久大香线蕉亚洲五月天| 中国国产高清免费av片| 亚洲av永久无码制服河南实里| 久久久久久毛片免费播放| 亚洲人成毛片线播放| 成人午夜视频免费| 一级毛片试看60分钟免费播放| 亚洲日产无码中文字幕| 57pao一国产成永久免费| 亚洲精品无码高潮喷水A片软| 免费h黄肉动漫在线观看| 任你躁在线精品免费| 亚洲天堂一区二区三区| 免费观看理论片毛片| 一个人免费播放在线视频看片| 久久精品国产亚洲AV网站| 成人免费视频小说| 岛国岛国免费V片在线观看| 亚洲国产美女在线观看| 国产成人精品免费视频大全五级| 中文字幕免费人成乱码中国| 亚洲国产综合第一精品小说| 免费国产高清视频| 精品国产污污免费网站aⅴ | 亚洲AV无码久久精品色欲|