<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


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


    網站導航:
     
    主站蜘蛛池模板: 亚美影视免费在线观看| 亚洲国产精品乱码在线观看97| 亚洲fuli在线观看| 性无码免费一区二区三区在线 | 一区二区无码免费视频网站 | 亚洲精品综合久久中文字幕| 久久久免费观成人影院| 四虎成人精品在永久免费| 亚洲AV无码成人专区| 2021精品国产品免费观看| 亚洲av无码无在线观看红杏| a色毛片免费视频| 国产精品亚洲а∨无码播放| 一个人看的免费观看日本视频www 一个人看的免费视频www在线高清动漫 | 亚洲国产精品白丝在线观看| 久久综合九色综合97免费下载| 亚洲无线观看国产精品| 亚洲日韩中文字幕无码一区| 亚洲一区免费在线观看| 亚洲综合在线观看视频| 99久久精品免费精品国产| 亚洲s色大片在线观看| 全免费a级毛片免费看| 亚洲小说区图片区另类春色| 四虎精品免费永久免费视频| 国产成人免费片在线视频观看| 亚洲午夜电影在线观看高清| 色欲国产麻豆一精品一AV一免费 | 亚洲人成在线播放网站| 久久午夜夜伦鲁鲁片免费无码影视 | 婷婷综合缴情亚洲狠狠尤物| 中文字幕免费在线看| 亚洲欧洲日产国产最新| 在线免费观看一区二区三区| 久久久久久久国产免费看| 亚洲欧洲综合在线| 亚洲AⅤ视频一区二区三区| a级毛片免费在线观看| 久久精品国产亚洲av麻豆蜜芽| 免费一级国产生活片| 99爱在线观看免费完整版|