自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

JavaScript DOM修改文檔樹(shù)方法實(shí)例

開(kāi)發(fā) 前端
文章提供了四種JavaScript DOM修改文檔書的實(shí)例,常用的是appendChild()和insertBefore(),而removeChild() 和replaceChild()很少用到。

在我們工作中大多數(shù)DOM腳本的主要任務(wù)就是在DOM文檔中插入,刪除和移動(dòng)節(jié)點(diǎn)。W3C DOM 提供了4種方法來(lái)修改文檔樹(shù)。常用的是appendChild()和insertBefore(),而removeChild() 和replaceChild()很少用到。

一般用法

修改文檔提供的4個(gè)方法,都是指向它們所作用的節(jié)點(diǎn)的引用。導(dǎo)航條實(shí)例:

  1. <div id="menu"> 
  2.     <h1>我的導(dǎo)航條</h1>            
  3.     <ul id="nav"> 
  4.        <li><a href="#">HOME</a></li> 
  5.        <li><a href="#">(X)Html / Css</a></li> 
  6.        <li><a href="#">Ajax / RIA</a></li> 
  7.        <li><a href="#">GoF</a></li> 
  8.        <li><a href="#">JavaScript</a></li> 
  9.        <li><a href="#">JavaWeb</a></li> 
  10.        <li><a href="#">jQuery</a></li> 
  11.        <li><a href="#">MooTools</a></li> 
  12.        <li><a href="#">Python</a></li> 
  13.        <li><a href="#">Resources</a></li> 
  14.     </ul> 
  15. </div>  

appendChild()

appendChild()方法讓你添加一個(gè)節(jié)點(diǎn)并使其成為某個(gè)元素的***一個(gè)子節(jié)點(diǎn)。如果添加的該節(jié)點(diǎn)已經(jīng)存在于文檔中,它會(huì)從當(dāng)前位置移除。該節(jié)點(diǎn)的子節(jié)點(diǎn)保持不變,它們也被一起移動(dòng)到新的位置。

  1. <script type="text/javascript"> 
  2. window.onload=function(){  
  3.   /*為一個(gè)元素添加子元素*/  
  4.   var nav=document.getElementById("nav");  
  5.   //創(chuàng)建一個(gè)li新元素  
  6.   var newChild=document.createElement('li');  
  7.   //創(chuàng)建一個(gè)a 新元素  
  8.   var newLink=document.createElement('a')  
  9.   //創(chuàng)建一個(gè) Text 節(jié)點(diǎn)  
  10.   var newText=document.createTextNode('My Wiki');  
  11.   //把Text添加到a元素節(jié)點(diǎn)中  
  12.   newLink.appendChild(newText);  
  13.   //給a元素節(jié)點(diǎn)設(shè)置屬性href和內(nèi)容  
  14.   newLink.setAttribute('href',"#");  
  15.   //把a(bǔ)元素節(jié)點(diǎn)添加到新的li元素節(jié)點(diǎn)中  
  16.   newChild.appendChild(newLink);  
  17.   //把新的li元素節(jié)點(diǎn)添加到 ul 元素節(jié)點(diǎn)里  
  18.   nav.appendChild(newChild);  
  19.    
  20.   /*<li>從原始位置上被移除,成為ul的***一個(gè)子節(jié)點(diǎn)。它的a 元素節(jié)點(diǎn)和文本節(jié)點(diǎn)HODE也被移了過(guò)來(lái)*/  
  21.   navnav_list=nav.getElementsByTagName("li");//返回相同的一組元素  
  22.   nav.appendChild(nav_list[0]);  
  23. }  
  24. </script>  

創(chuàng)建新DOM元素的通用函數(shù)

  1. <script type="text/javascript"> 
  2. function create( elem ) {  
  3.     return document.createElementNS ?  
  4.         document.createElementNS( 'http://www.w3.org/1999/xhtml', elem ) :  
  5.         document.createElement( elem );  
  6. }  
  7.    
  8. </script>  

我們看到結(jié)果:

添加好的子節(jié)點(diǎn)

從原始位置上被移除,成為ul的***一個(gè)子節(jié)點(diǎn)

insertBefore()

insertBefore()方法允許你在其他節(jié)點(diǎn)的前面插入一個(gè)節(jié)點(diǎn),所以當(dāng)你想要添加一個(gè)子節(jié)點(diǎn),但又不希望該節(jié)點(diǎn)成為***一個(gè)子節(jié)點(diǎn)的時(shí)候,就可以使用此方法。就像appendChild()方法一樣,如果插入的節(jié)點(diǎn)已經(jīng)存在于文檔之中,它會(huì)被從當(dāng)前位置移除,而且該節(jié)點(diǎn)在被插入之后乃保持它的子節(jié)點(diǎn)結(jié)構(gòu)。

  1. <script type="text/javascript"> 
  2. window.onload=function(){  
  3.   var nav=document.getElementById("nav");  
  4.   navnav_list=nav.getElementsByTagName("li");//返回相同的一組元素  
  5.   //***個(gè)節(jié)點(diǎn)  
  6.   var x=nav_list[0];  
  7.   //***一個(gè)節(jié)點(diǎn)  
  8.   var y=nav_list[nav_list.length-1]  
  9.   //在x元素對(duì)象之前插入y元素對(duì)象  
  10.   nav.insertBefore(y,x);  
  11.   //在x元素對(duì)象之前插入新生產(chǎn)的newChild元素對(duì)象  
  12.   nav.insertBefore(newChild,x);//newChild元素對(duì)象的創(chuàng)建請(qǐng)參考上面的代碼  
  13. }  
  14. </script>  

 #p#

在其他節(jié)點(diǎn)的前面插入一個(gè)節(jié)點(diǎn)

replaceChild()

replaceChild()方法允許你把一個(gè)節(jié)點(diǎn)替換為另一個(gè)節(jié)點(diǎn)。就像appendChild()和insertBefore()一樣,如果插入的節(jié)點(diǎn)已經(jīng)存在于文檔之中,它會(huì)被從當(dāng)前位置移除,而且該節(jié)點(diǎn)在被插入之后乃保持它的子節(jié)點(diǎn)結(jié)構(gòu)。

  1. <script type="text/javascript"> 
  2. window.onload=function(){  
  3.   var nav=document.getElementById("nav");  
  4.   navnav_list=nav.getElementsByTagName("li");//返回相同的一組元素  
  5.   //***個(gè)節(jié)點(diǎn)對(duì)象  
  6.   var x=nav_list[0];  
  7.   //x節(jié)點(diǎn)對(duì)象被newChild新節(jié)點(diǎn)對(duì)象替換了  
  8.   nav.replaceChild(newChild,x);  
  9. }  
  10. </script>  

把一個(gè)節(jié)點(diǎn)替換為另一個(gè)節(jié)點(diǎn)

removeChild()

removeChild()方法允許你移除一個(gè)節(jié)點(diǎn)以及它的子節(jié)點(diǎn)們。

  1. <script type="text/javascript"> 
  2. window.onload=function(){  
  3.   var nav=document.getElementById("nav");  
  4.   navnav_list=nav.getElementsByTagName("li");//返回相同的一組元素  
  5.   //***一個(gè)節(jié)點(diǎn)  
  6.   var y=nav_list[nav_list.length-1]  
  7.   //移除***面的一個(gè)節(jié)點(diǎn)  
  8.   nav.removeChild(y);  
  9. }  
  10. </script>  

你移除一個(gè)節(jié)點(diǎn)以及它的子節(jié)點(diǎn)們

移除所有的子節(jié)點(diǎn)

有的時(shí)候你需要把一個(gè)元素清除干凈;你想在添加新節(jié)點(diǎn)前清除原來(lái)的所有子點(diǎn)。有兩個(gè)簡(jiǎn)單的方法來(lái)做這件事情:

  1. <script type="text/javascript"> 
  2.  while (x.childNodes[0]){  
  3.   x.removeChild(x.childNodes[0]);  
  4.  }  
  5.    
  6.  /*  
  7.  //我們可以使用firstChild來(lái)代替childNodes[0]  
  8.   while (x.firstChild){  
  9.   x.removeChild(x.firstChild);  
  10.  }  
  11.  * /  
  12. </script>  

這是一個(gè)簡(jiǎn)單的while()循環(huán),只要元素存在***個(gè)節(jié)點(diǎn)(childNodes[0]),它就移除這個(gè)節(jié)點(diǎn),接著節(jié)點(diǎn)集合立即更新。所以(原來(lái)的)第二個(gè)節(jié)點(diǎn)成為了***個(gè)節(jié)點(diǎn),循環(huán)就會(huì)一直重復(fù),直到X沒(méi)有子節(jié)點(diǎn)為止。另一個(gè)方法就簡(jiǎn)單了

  1. <script type="text/javascript"> 
  2. x.innerHTML='';  
  3. </script>  

 #p#

輔助函數(shù)

appendChild()和insertBefore()都有2個(gè)參數(shù),但是我們?cè)趹?yīng)用的時(shí)候,還要注意參數(shù)的先后順序。既然這么麻煩我們還是自己寫一些輔助函數(shù)來(lái)代替原有的appendChild()和insertBefore()。在另一個(gè)元素之前插入元素的函數(shù):

  1. <script type="text/javascript"> 
  2. //insertBefore()的代替方法  
  3. function before( parent, before, elem ) {  
  4.     // Check to see if no parent node was provided  
  5.  //檢查parent是否傳入  
  6.     if ( elem == null ) {  
  7.         elem = before;  
  8.         before = parent;  
  9.         parent  = before.parentNode;  
  10.     }  
  11.    
  12.     // Get the new array of elements  
  13.  //獲取元素的新數(shù)組  
  14.     var elems = checkElem( elem );  
  15.    
  16.     // Move through the array backwards,  
  17.     // because we’re prepending elements  
  18.  //向后遍歷數(shù)組  
  19.  //因?yàn)槲覀兿蚯安迦朐? 
  20.     for ( var i = elems.length - 1; i >= 0; i-- ) {  
  21.         parent.insertBefore( elems[i], before );  
  22.     }  
  23. }  
  24. </script>  

為另一個(gè)元素添加一個(gè)子元素:

  1. <script type="text/javascript"> 
  2. //appendChild()的代替方法  
  3. function append( parent, elem ) {  
  4.     // Get the array of elements  
  5.  //獲取元素?cái)?shù)組  
  6.     var elems = checkElem( elem );  
  7.    
  8.     // Append them all to the element  
  9.  //把它們所有都追加到元素中  
  10.     for ( var i = 0; i <= elems.length; i++ ) {  
  11.         parent.appendChild( elems[i] );  
  12.     }  
  13. }  
  14. </script>  

before和append的輔助函數(shù):

  1. <script type="text/javascript"> 
  2. function checkElem( elem ) {  
  3.     // If only a string was provided, convert it into a Text Node  
  4.  //如果只提供字符串,那就把它轉(zhuǎn)換為文本節(jié)點(diǎn)  
  5.     return elem && elem.constructor == String ?  
  6.    document.createTextNode( elem ) : elem;  
  7. }  
  8. </script>  

注意:constructor的用法。

有時(shí)你可能需要對(duì)變量進(jìn)行類型檢查,或者判斷變量是否已定義。有兩種方法可以使用:typeof函數(shù)與constructor屬性。typeof可以檢查到變量是否有定義,而construct只能檢查已定義變量的類型。

移除所有的子節(jié)點(diǎn)的輔助函數(shù):

  1.  <script type="text/javascript"> 
  2. function empty( elem ) {   
  3.  while (elem.firstChild){  
  4.    remove(elem.firstChild);  
  5.  }  
  6.  /*  
  7.  //我們可以使用firstChild來(lái)代替childNodes[0]  
  8.  while (elem.childNodes[0])  
  9.   remove(elem.childNodes[0]);  
  10.  * /  
  11. }  
  12.    
  13. function remove( elem ) {  
  14.     if ( elem ) elem.parentNode.removeChild( elem );  
  15. }  
  16. </script> 

 

【編輯推薦】

  1. JavaScript DOM實(shí)戰(zhàn):創(chuàng)建和克隆元素
  2. XML DOM新手入門指南
  3. 在JavaScript中如何實(shí)現(xiàn)DOM操作 
責(zé)任編輯:王曉東 來(lái)源: cssrainbow
相關(guān)推薦

2010-09-13 14:24:17

JavaScript

2010-09-13 17:12:55

JavaScript

2010-09-09 13:55:47

XML DOM

2010-09-28 14:35:34

DOM遍歷

2021-09-09 10:26:26

Javascript 文檔對(duì)象前端

2010-09-08 15:47:08

JavsScriptJavaScript

2010-09-08 17:26:46

JavaScript

2010-09-28 14:12:50

Javascript

2010-09-28 10:03:15

DOM文檔對(duì)象模型

2012-04-26 08:29:22

DOM

2010-09-28 13:24:34

DOM文檔對(duì)象模型

2010-09-28 09:43:37

DOM文檔對(duì)象模型

2019-12-11 09:23:51

JavaScriptHTMLXML

2010-09-15 14:40:07

HTMLposition屬性

2010-09-28 11:03:19

XML DOM

2010-09-28 11:22:18

Html DOM樹(shù)

2017-07-19 14:26:01

前端JavaScriptDOM

2010-09-10 16:21:58

JavaScript

2010-09-28 16:22:17

DOM樹(shù)

2010-09-28 15:27:09

JavaScript
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)