天天看點

DOM基礎執行個體

DOM基礎執行個體

一.什麼是DOM節點?

說白了标簽元素和節點都一樣隻是在不同的地方叫法不同

在css裡面   叫标簽

在JS裡面    叫元素

在DOM裡面叫節點

浏覽器支援情況:現在主流浏覽器大概就是:

IE                      10%

Chrome               60%

FF                     90%

(1)         DOM節點

(2)         ChildNodes(用來擷取子節點,這個擷取的是一個數組)    nodeType節點類型

ChildNodes例子

<!DOCTYPE html>

<html>

   <head>

     <meta charset="UTF-8">

     <title></title>

     <script>

        window.onload=function()

        {

           var oUl=document.getElementById('ul1');

           alert(oUl.childNodes.length);

        }

     </script>

   </head>

   <body>

     <ul id="ul1">

        <li></li>

        <li></li> 

     </ul>

   </body>

</html>

我寫了一個ul裡面有2個li标簽用ChildNodes來擷取ul的子節點,其實都知道 ul的子節點是li ,并且有2個,但是你用某些浏覽器打開應該會出現5個子節點,這多出來的3個其實是3個文本節點,什麼是文本節點其實就是空白,你自己算一下,ul裡面先是空白,然後是li,再是空白,再是li,然後再是空白,這樣就是5個,這就是浏覽器的相容問題!

下面來解決相容問題,然後就用到nodeType了,nodeType是擷取節點的類型

擷取節點類型的例子:借用上面的代碼寫一個for循環

<script>

           for(var i=0;i<oUl.childNodes.length;i++)

           {

           alert(oUl.childNodes[i].nodeType)

           }

結果會報出來3和1 現在說明3代表文本節點,1代表元素節點

nodeType==3 è代表文本節點

nodeType==1 è代表元素節點

大部分浏覽器相容問題都是用if解決

           //alert(oUl.childNodes.length)

           alert(oUl.childNodes[i].nodeType)

           if(oUl.childNodes[i].nodeType==1)

             oUl.childNodes[i].style.background='red';            

這段代碼是元素節點背景變為紅色

下面來講一個小東西childred

window.onload=function()

           alert(oUl.children.length)

</script>

Children也是來擷取子節點的但是她不會算文本節點,但是很少用,不知道為什麼,你們有印象就好。

(3)         父節點parentNode

例子把父元素隐藏

           var aA=document.getElementsByTagName('a')

           for(var i=0;i<aA.length;i++)

             aA[i].onclick=function()

             {

                this.parentNode.style.display="none"

             }

         }

}

(4)         offsetParent擷取某個元素用來定位的父節,這個沒什麼可講,直接用代碼可以擷取

代碼如下

     <style>

        #div1{background: red;width:200px;height:200px;position:absolute;margin:100px;}

       #div2{background:#999;width:100px;height:100px;position:absolute;left:50px;top:50px;}

     </style>

           var oDiv2=document.getElementById('div2');

           alert(oDiv2.offsetParent)

     <div id="div1">

        <div id="div2">

        </div>

     </div>

(5)         首尾節點(有相容問題)

firstChild  firstElementChild

lastChild   lastElementChild

         oUl.firstChild.style.background='red'

這個代碼是第一個子節點顔色變紅,但是你執行會報錯,沒錯浏覽器問題不相容,你的第一個子節點是文本節點,然後就用到了firstElementChild,但是。。。這個也有相容問題,然後咋辦。。用if解決

         oUl.firstElementChild.style.background='red'

解決相容問題

   <script>

           //oUl.firstChild.style.background='red';

           if(oUl.firstElementChild)

              oUl.firstElementChild.style.background='red';

           }else

           {

             oUl.firstChild.style.background='red';

      }

二  元素屬性操作

第一種 oDiv.style.display=’block’

第二種 oDiv.style[‘idsplay’]=’block’

第三種 Dom方式

DOM方式操作元素屬性

1,    擷取 getAttribute(名稱)

2,    設定 setAttribute(名稱,值)能用這個方法的時候都可以用上面的第二種方式

3,    删除 removeAttribute(名稱)

例子代碼

           var te1=document.getElementById('text1');

           var te2=document.getElementById('text2');

           te2.onclick=function()

             //te1.value='aaa'//第一種

             //te1['value']='aaa'//第二種

             te1.setAttribute('value','aaa');

     <input id="text1" type="text" />

     <input id="text2" type="button" value="按鈕"/>

三 DOM元素靈活查找

(1)   用className條件篩選選擇元素

例子

<!DOCTYPE html>

     <meta charset="UTF-8">

        window.onload=function()

{

           var oUl=document.getElementById('ul1');         

           varoLi=oUl.getElementsByTagName('li')

              for(vari=0;i<oLi.length;i++)

              {

             if(oLi[i].className=='box')

                 {

                oLi[i].style.background='red';

                 }

              }

        <li class="box">11</li>

        <li>11</li>

上面代碼用className查找元素是元素屬性變紅

(2)   也可以用className封裝成一個函數,然後友善以後直接調用

寫法如下

           function getclass(name,box)

             var aResult=[];

             var a=name.getElementsByTagName('*')//因為不知道要選擇什麼元素是以寫*号

             for(var i=0;i<a.length;i++)

             if(a[i].className=='box')

                aResult.push(a[i]);

             }

             return aResult;

           var oUl=document.getElementById('ul1');         

           var abox=getclass(oUl,'box')

           for(var i=0;i<abox.length;i++)

             abox[i].style.background='red'

         }

繼續閱讀