亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

DOM基礎教程之使用DOM

2019-11-20 13:21:53
字體:
來源:轉載
供稿:網友

在了解DOM(文本對象模型)的框架和節點后,最重要的是使用這些節點處理html網頁

對于一個DOM節點node,都有一系列的屬性和方法可以使用。常用的有下表。

完善:http://www.w3school.com.cn/xmldom/dom_element.asp

1.訪問節點

BOM提供了一些邊界的方法訪問節點,常用的就是getElementsByTagName(),和getElementById()

復制代碼 代碼如下:

<script type="text/javascript">
    function searchDOM(){
        var oLi = document.getElementsByTagName("li");
       var j =oLi.length;
       var j2 =oLi[5].tagName;
        var j3 =oLi[0].childNodes[0].nodeValue;
        document.write(j+"<br>"+j2+"<br>"+j3+"<br>");
    }
</script>
<body>
<body onload="searchDOM()">
<div id-"in"></div>
<ul>客戶端語言
    <li>HTML</li>
    <li>JavaScript</li>
    <li>CSS</li>
</ul>
<ul>服務器端語言
    <li>ASP.NET</li>
    <li>JSP</li>
    <li>PHP</li>
</ul>
</body>

document.getElementById()

復制代碼 代碼如下:

<script type="text/javascript">
    window.onload = function(){
        function findid(){
            var j4 =oli2.tagName;
            document.write(j4);
        }
        var oli2 = document.getElementById("inn");
        oli2.onclick = findid;
    }
</script>
<li id="inn">PHP</li>

 
復制代碼 代碼如下:

<html>
<body id="myid" class="mystyle">
<div class="myid2"></div>
<script type="text/javascript">
x=document.getElementsByTagName('div')[0];
document.write("div CSS class: " + x.className);
document.write("<br />");
document.write("An alternate way: ");
document.write(document.getElementById('myid').className);
</script>

</body>
</html>
//id獲得className

 2.檢測節點類型

 通過節點的nodeType可以檢測到節點的類型,該參數一個返回12個整數值。

表達格式如 document.nodeType

正真有用的,還是DOM(一)模型中的模型節點 提到的三種類型

元素節點,文本節點和屬性節點

1.元素節點 element node 返回值為 1

2.屬性節點 attribute node 返回值為 2

3.文本節點 text node 返回值為 3

復制代碼 代碼如下:

<script type="text/javascript">
    window.onload = function(){
        function findid(){
            var j5 =oli2.nodeType;
            document.write("nodeType:"+ j5 +"<br>");
        }
        var oli2 = document.getElementById("inn");
        oli2.onclick = findid;
    }
</script>
<li id="inn">CSS</li>
返回:nodeType:1

這意味著可以對某種節點做單獨處理,在搜索節點時非常實用。后面會講到。

3.利用父子兄關系查找節點

在第一小節訪問節點上,利用節點的childNodes屬性來訪問元素節點包含的文本節點。

本小節利用節點的父子兄關系來查找節點

*利用hasChildNodes和childNodes屬性獲取該節點包含的所有節點

復制代碼 代碼如下:

<head>
    <title>childNodes</title>
    <script language="javascript">
       window.onload = function myDOMInspector(){
            var oUl = document.getElementById("myList");    //獲取<ul>標記
            var DOMString = "";
            if(oUl.hasChildNodes()){                        //判斷是否有子節點
                var oCh = oUl.childNodes;
                for(var i=0;i<oCh.length;i++)                //逐一查找
                    DOMString += oCh[i].nodeName + "<br>";
            }
            document.write(DOMString);
        }
    </script>
</head>
<body>
<ul id="myList">
    <li>糖醋排骨</li>
    <li>圓籠粉蒸肉</li>
    <li>泡菜魚</li>
    <li>板栗燒雞</li>
    <li>麻婆豆腐</li>
</ul>
</body>

 4.DOM獲取節點的父節點

復制代碼 代碼如下:

    <script language="javascript">
       window.onload = function(){
     var food = document.getElementById("mydearfood");
      document.write(food.parentNode.tagName)
        }
    </script>
</head>
<body>
<ul>
    <li>糖醋排骨</li>
    <li>圓籠粉蒸肉</li>
    <li>泡菜魚</li>
    <li id="mydearfood">板栗燒雞</li>
    <li>麻婆豆腐</li>
</ul>
//返回 ul

使用父節點,成功的獲得了指定節點的父節點

 5.使用parentNode屬性

復制代碼 代碼如下:

<head>
    <title>childNodes</title>
    <script language="javascript">
       window.onload = function(){
     var food = document.getElementById("mydearfood");
           var parentElm = food.parentNode;
           while(parentElm.className != "colorful" && parentElm != document.body)
               parentElm = parentElm.parentNode;    //一路往上找
           document.write("tageName:"+parentElm.tagName+"<br>");
           document.write("claaName:"+parentElm.className+"<br>");
           document.write("typeOf:"+typeof(food)+"<br>");
        }
    </script>
</head>
<body>
<div class="colorful">
<ul>
    <span>
    <li>糖醋排骨</li>
    <li>圓籠粉蒸肉</li>
    <li>泡菜魚</li>
    <li id="mydearfood">板栗燒雞</li>
    <li>麻婆豆腐</li>
    </span>
</ul>
    </div>
</body><br>//輸出<br>//tageName:DIV<br>claaName:colorful<br>typeOf:object

  從某個子節點開始,一直向上搜索父節點,直到節點的類名為“colorful”

6.dom的兄弟關系

復制代碼 代碼如下:

<head>
    <title>childNodes</title>
    <script language="javascript">
       window.onload = function(){
     var foods = document.getElementById("mydearfood");
     var nextF = foods.nextSibling;
     alert("nextSibling:"+nextF.tagName +"<br>");
        }

    </script>
</head>
<body>
<div class="colorful">
<ul>
    <span>
    <li>糖醋排骨</li>
    <li>圓籠粉蒸肉</li>
    <li>泡菜魚</li>
    <li id="mydearfood">板栗燒雞</li>
    <li>麻婆豆腐</li>
         <li>麻婆豆腐</li>
         <li>麻婆豆腐</li>
    </span>
</ul>
    </div>
</body>

利用nextsibling和previousSibling屬性訪問兄弟節點看上去很好。

但僅僅適用于ie瀏覽器

為了使用代碼有良好的兼容性,就必須使nodeType進行判斷

以下做兼容性處理:

復制代碼 代碼如下:

<head>
<title>Siblings</title>
<script language="javascript">
function nextSib(node){
    var tempLast = node.parentNode.lastChild;
    //判斷是否是最后一個節點,如果是則返回null
    if(node == tempLast)
        return null;
    var tempObj = node.nextSibling;
    //逐一搜索后面的兄弟節點,直到發現元素節點為止
    while(tempObj.nodeType!=1 && tempObj.nextSibling!=null)
        tempObj = tempObj.nextSibling;
    //三目運算符,如果是元素節點則返回節點本身,否則返回null
    return (tempObj.nodeType==1)?tempObj:null;
}
function prevSib(node){
    var tempFirst = node.parentNode.firstChild;
    //判斷是否是第一個節點,如果是則返回null
    if(node == tempFirst)
        return null;
    var tempObj = node.previousSibling;
    //逐一搜索前面的兄弟節點,直到發現元素節點為止
    while(tempObj.nodeType!=1 && tempObj.previousSibling!=null)
        tempObj = tempObj.previousSibling;
    return (tempObj.nodeType==1)?tempObj:null;
}
function myDOMInspector(){
    var myItem = document.getElementById("myDearFood");
    //獲取后一個元素兄弟節點
    var nextListItem = nextSib(myItem);
    //獲取前一個元素兄弟節點
    var preListItem = prevSib(myItem);
    alert("后一項:" + ((nextListItem!=null)?nextListItem.firstChild.nodeValue:null) + " 前一項:" + ((preListItem!=null)?preListItem.firstChild.nodeValue:null) );
}
</script>
</head>
<body onload="myDOMInspector()">
    <ul>
        <li>糖醋排骨</li>
        <li>圓籠粉蒸肉</li>
        <li>泡菜魚</li>
        <li id="myDearFood">板栗燒雞</li>
        <li>麻婆豆腐</li>
    </ul>
</body>

7.設置節點屬性

復制代碼 代碼如下:

<head>
    <title>childNodes</title>
    <script language="javascript">
       window.onload = function(){
           //獲取圖片
           var imgDataBe = document.getElementsByTagName("img")[0];
           //取得圖片的title屬性
           imgDataBe.setAttribute("src","02.gif");
           imgDataBe.setAttribute("title","人情坡");
           document.write(imgDataBe.getAttribute("title"));
           document.write(imgDataBe.getAttribute("alt"));
           document.write(imgDataBe.getAttribute("node-data"));
           document.write(imgDataBe.getAttribute("node_data"));
        }
    </script>
</head>
<body>
<div class="colorful">
<img src="01.jpg" title="情人坡" alt="111" node-data="222" node_data="3333">
<img src="01.jpg" title="情人坡22">
</body>

用setAttribute()方法設置節點屬性

復制代碼 代碼如下:

<head>
        <title>childNodes</title>
        <meta charset="utf-8" />
        <script language="javascript">
            window.onload = function() {
                var bkk = document.getElementById("new5");
                var clickbk = document.getElementById("qiehuan");
                clickbk.onclick = dsqiehuan;
                function dsqiehuan() {
                    bkk.setAttribute("class", "xxx")
                }
            }
        </script>
        <style>
            .xxx{color:#ddd}
        </style>
    </head>
    <body>
        <div id="new5">
            555
        </div>
        <em id="qiehuan">切換</em>
    </body>

8.createElement() 創建節點

復制代碼 代碼如下:

    <head>
        <title>childNodes</title>
        <meta charset="utf-8" />
        <script language="javascript">
            window.onload = function() {
        var oP = document.createElement("p");
        var oText = document.createTextNode("使用dom創建節點");
        var oText1 = document.createTextNode("使用dom創建節點123");
        oP.appendChild(oText);
        oP.appendChild(oText1);
        document.body.appendChild(oP);
            }
        </script>
    </head>
    <body>
    <p>這里本來有個P,測試createElement()</p>
    </body>

 9.removeChild移除節點

復制代碼 代碼如下:

<head>
        <title>childNodes</title>
        <meta charset="utf-8" />
        <script language="javascript">
            window.onload = function() {
        var oP = document.getElementsByTagName("p")[0];
        oP.parentNode.removeChild(oP);//結尾為 .removeChild(oP),不是.removeChild("oP")
            }
        </script>
    </head>
    <body>
    <p>這里本來有個P,測試createElement()</p>
    </body>

 10.insertBefore() 在特定節點前插入節點

復制代碼 代碼如下:

    <head>
        <title>childNodes</title>
        <meta charset="utf-8" />
        <script language="javascript">
            window.onload = function() {
        var oPold = document.getElementsByTagName("p")[0];
        var oPnew = document.createElement("p");
        var oText = document.createTextNode("新節點")
       oPnew.appendChild(oText) ;
        oPold.parentNode.insertBefore(oPnew,oPold);//接收兩個參數,一個是新參數,一個是舊節點參數
            }
        </script>
    </head>
    <body>
    <p>這里本來有個P</p>
    </body>

11.在特定的節點之后插入新元素(2015年1月9日補充)

DOM提供的方法只能用insertBefore()在目標元素前加入新的元素,或者利用appendchild()方法在父元素的childNodes末尾加入新的元素(示例:地址)。

而實際中常常用到在某個特定的元素末尾加入新的元素。而DOM方法并沒有insertBefore()方法,但是利用現有的知識,完全可以利用現有知識進行編寫。

 代碼思路如下

復制代碼 代碼如下:

    function insertAfter(newElement, targetElement) {
                var oparent = targetElement.parentNode; //找到目標元素的父元素
                if (oparent.lastChild == targetElement) //如果目標是最后一個元素了
                oparent.appendChild(newElement); //直接添加到最后一個元素的后面
                else //插入到下一個元素的父元素節點之前     
                    oparent.insertBefore(newElement, targetElement.nextSibling)

實例:(元素外追加)原來實例:地址

復制代碼 代碼如下:

<head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body onload="interP()">
        <p>第一個</p>
        <p id="target">第二個</p>
        <script type="text/javascript">
            function insertAfter(newElement, targetElement) {
                var oparent = targetElement.parentNode; //找到目標元素的父元素
                if (oparent.lastChild == targetElement) //如果目標是最后一個元素了
                oparent.appendChild(newElement); //直接添加到最后一個元素的后面
                else //插入到下一個元素的父元素節點之前     
                    oparent.insertBefore(newElement, targetElement.nextSibling)
            }
            function interP() {
                var ooParent = document.getElementById("target");
                var oonewP = document.createElement("a");
                oonewP.setAttribute("href","                var ootextP = document.createTextNode("鏈接");
                oonewP.appendChild(ootextP);
                insertAfter(oonewP, ooParent);
            }
        </script>
    </body>

 實例:元素內添加

12.添加文檔碎片提高執行效率

復制代碼 代碼如下:

    <head>
        <title>childNodes</title>
        <meta charset="utf-8" />
        <script language="javascript">
            window.onload = function() {
    var oPold = document.getElementsByTagName("p")[0];
    var aColors = ["red","green","blue","magenta","yellow","chocolate","black","aquamarine","lime","fuchsia","brass","azure","brown","bronze","deeppink","aliceblue","gray","copper","coral","feldspar","orange","orchid","pink","plum","quartz","purple"];
    var oFragment = document.createDocumentFragment();    //創建文檔碎片
    for(var i=0;i<aColors.length;i++){
        var oP = document.createElement("p");
        var oText = document.createTextNode(aColors[i]);
        oP.appendChild(oText);
        oFragment.appendChild(oP);        //將節點先添加到碎片中
    }
    //document.body.appendChild(oFragment);    //最后一次性添加到頁面
     oPold.parentNode.insertBefore(oFragment,oPold);//結合insertBefore使文檔碎片添加到節點之前
            }
        </script>
    </head>
    <body>
    <p>這里本來有個P</p>
    </body>

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲字幕在线观看| 91色琪琪电影亚洲精品久久| 国产精彩精品视频| 亚洲一区av在线播放| 91久久久久久久久| 亚洲精选一区二区| 91免费欧美精品| 国产在线观看精品一区二区三区| 亚洲成人久久一区| 亚洲视频在线观看| 日韩欧美一区二区三区久久| 7m第一福利500精品视频| 日韩中文在线中文网在线观看| 黑人巨大精品欧美一区二区免费| 国产欧美婷婷中文| 91在线|亚洲| 91久久综合亚洲鲁鲁五月天| 日韩av在线播放资源| 91欧美精品午夜性色福利在线| 欧美一区二区.| 欧美性猛交xxxx乱大交蜜桃| 亚洲成人久久久| 欧美国产日韩在线| 亚洲精品v欧美精品v日韩精品| 国产精品91久久| 亚洲丁香久久久| 国产精品久久久久久av福利软件| 久久久999精品视频| 久久久中精品2020中文| 菠萝蜜影院一区二区免费| 国产精品视频内| 欧美成在线观看| 欧美日韩第一页| 久久夜精品va视频免费观看| 在线精品国产成人综合| 26uuu日韩精品一区二区| 久久综合网hezyo| 久久久久久久网站| 美女久久久久久久久久久| 亚洲国内精品在线| 中文字幕日韩高清| 欧美激情极品视频| 在线视频一区二区| 欧美另类老女人| 亚洲国产美女精品久久久久∴| 国产精品视频自在线| 77777亚洲午夜久久多人| 欧美成人精品激情在线观看| 国产成人精品日本亚洲| 亚洲欧美在线播放| 亚洲综合国产精品| 国产99久久久欧美黑人| 国产亚洲精品成人av久久ww| 国产精品91久久久久久| 精品国产自在精品国产浪潮| 日韩在线视频观看正片免费网站| 欧美最近摘花xxxx摘花| 精品欧美一区二区三区| 亚洲春色另类小说| 美女少妇精品视频| 成人写真视频福利网| 亚洲自拍欧美另类| 亚洲黄色免费三级| 国产亚洲激情视频在线| 成人免费看黄网站| 91精品国产高清久久久久久| 久久久久久久久久久人体| 中文字幕视频在线免费欧美日韩综合在线看| 国产91对白在线播放| 中文字幕亚洲欧美一区二区三区| 少妇高潮久久77777| 欧美在线一级视频| 亚洲护士老师的毛茸茸最新章节| 久久色在线播放| 欧美国产亚洲视频| 黑人狂躁日本妞一区二区三区| 欧美激情久久久久| 欧美电影《睫毛膏》| 亚洲视频999| yw.139尤物在线精品视频| 欧美国产精品人人做人人爱| 日本久久久久久久久| 国产女人精品视频| 亚洲最大福利网站| 91在线看www| 91系列在线播放| 午夜精品久久久久久99热软件| 在线视频国产日韩| 亚洲三级av在线| 日本伊人精品一区二区三区介绍| 亚洲色图25p| 亚洲精品中文字| 久久99精品视频一区97| 国产在线视频2019最新视频| 国产精品久久久久久av福利软件| 色妞欧美日韩在线| 高清欧美性猛交| 国产精品福利在线观看网址| 国产一区二区三区免费视频| 亚洲精品97久久| 美女福利精品视频| 成人国产在线视频| 国内精品久久影院| 欧美一级大片在线观看| 欧美成人精品在线视频| 久久理论片午夜琪琪电影网| 亚洲天堂男人天堂| 午夜精品久久久久久久99黑人| 日日摸夜夜添一区| 亚洲国产精品一区二区三区| 日韩av片永久免费网站| 日韩亚洲欧美中文在线| 日本欧美黄网站| 国产97在线|日韩| 在线看片第一页欧美| 亚洲自拍在线观看| 日韩在线视频播放| 在线午夜精品自拍| 久久久在线观看| 欧美日韩国产精品一区二区三区四区| 91在线国产电影| 欧美在线一级va免费观看| 国外成人在线播放| 亚洲欧美在线免费观看| 亚洲影院色在线观看免费| 日韩亚洲欧美中文在线| 精品国产91久久久久久| 久久久av电影| 成人天堂噜噜噜| 久久久在线观看| 欧美精品成人在线| 91久久精品美女| 国产日韩av高清| 日韩欧美综合在线视频| 久久精品在线视频| 成人中文字幕在线观看| 日韩一区二区精品视频| 国产一区二区三区视频在线观看| 日韩精品在线观看视频| 日韩成人在线视频网站| 欧美放荡办公室videos4k| 国产精品视频在线播放| 国产在线精品成人一区二区三区| 欧美极品在线视频| 性欧美长视频免费观看不卡| 精品久久久国产精品999| 欧美视频中文字幕在线| 国产成人精品视频在线观看| 国产日韩欧美中文在线播放| 久久亚洲精品视频| 久热国产精品视频| 狠狠爱在线视频一区| 久久夜色精品国产欧美乱| 日韩精品视频在线观看网址| 久久国产天堂福利天堂| 久久久国产一区二区三区| 影音先锋日韩有码| 国产精品福利观看| 精品久久久一区二区| 日韩精品免费在线播放| 中文字幕精品一区二区精品| 久久精品国产久精国产思思| 日本高清视频精品| 91精品国产91久久久久久吃药|