成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JavaScript DOM修改文檔樹方法實例

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

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

一般用法

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

  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()方法讓你添加一個節(jié)點并使其成為某個元素的***一個子節(jié)點。如果添加的該節(jié)點已經(jīng)存在于文檔中,它會從當(dāng)前位置移除。該節(jié)點的子節(jié)點保持不變,它們也被一起移動到新的位置。

  1. <script type="text/javascript"> 
  2. window.onload=function(){  
  3.   /*為一個元素添加子元素*/  
  4.   var nav=document.getElementById("nav");  
  5.   //創(chuàng)建一個li新元素  
  6.   var newChild=document.createElement('li');  
  7.   //創(chuàng)建一個a 新元素  
  8.   var newLink=document.createElement('a')  
  9.   //創(chuàng)建一個 Text 節(jié)點  
  10.   var newText=document.createTextNode('My Wiki');  
  11.   //把Text添加到a元素節(jié)點中  
  12.   newLink.appendChild(newText);  
  13.   //給a元素節(jié)點設(shè)置屬性href和內(nèi)容  
  14.   newLink.setAttribute('href',"#");  
  15.   //把a元素節(jié)點添加到新的li元素節(jié)點中  
  16.   newChild.appendChild(newLink);  
  17.   //把新的li元素節(jié)點添加到 ul 元素節(jié)點里  
  18.   nav.appendChild(newChild);  
  19.    
  20.   /*<li>從原始位置上被移除,成為ul的***一個子節(jié)點。它的a 元素節(jié)點和文本節(jié)點HODE也被移了過來*/  
  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é)點

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

insertBefore()

insertBefore()方法允許你在其他節(jié)點的前面插入一個節(jié)點,所以當(dāng)你想要添加一個子節(jié)點,但又不希望該節(jié)點成為***一個子節(jié)點的時候,就可以使用此方法。就像appendChild()方法一樣,如果插入的節(jié)點已經(jīng)存在于文檔之中,它會被從當(dāng)前位置移除,而且該節(jié)點在被插入之后乃保持它的子節(jié)點結(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.   //***個節(jié)點  
  6.   var x=nav_list[0];  
  7.   //***一個節(jié)點  
  8.   var y=nav_list[nav_list.length-1]  
  9.   //在x元素對象之前插入y元素對象  
  10.   nav.insertBefore(y,x);  
  11.   //在x元素對象之前插入新生產(chǎn)的newChild元素對象  
  12.   nav.insertBefore(newChild,x);//newChild元素對象的創(chuàng)建請參考上面的代碼  
  13. }  
  14. </script>  

 #p#

在其他節(jié)點的前面插入一個節(jié)點

replaceChild()

replaceChild()方法允許你把一個節(jié)點替換為另一個節(jié)點。就像appendChild()和insertBefore()一樣,如果插入的節(jié)點已經(jīng)存在于文檔之中,它會被從當(dāng)前位置移除,而且該節(jié)點在被插入之后乃保持它的子節(jié)點結(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.   //***個節(jié)點對象  
  6.   var x=nav_list[0];  
  7.   //x節(jié)點對象被newChild新節(jié)點對象替換了  
  8.   nav.replaceChild(newChild,x);  
  9. }  
  10. </script>  

把一個節(jié)點替換為另一個節(jié)點

removeChild()

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

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

你移除一個節(jié)點以及它的子節(jié)點們

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

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

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

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

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

 #p#

輔助函數(shù)

appendChild()和insertBefore()都有2個參數(shù),但是我們在應(yīng)用的時候,還要注意參數(shù)的先后順序。既然這么麻煩我們還是自己寫一些輔助函數(shù)來代替原有的appendChild()和insertBefore()。在另一個元素之前插入元素的函數(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.  //因為我們向前插入元素  
  20.     for ( var i = elems.length - 1; i >= 0; i-- ) {  
  21.         parent.insertBefore( elems[i], before );  
  22.     }  
  23. }  
  24. </script>  

為另一個元素添加一個子元素:

  1. <script type="text/javascript"> 
  2. //appendChild()的代替方法  
  3. function append( parent, elem ) {  
  4.     // Get the array of elements  
  5.  //獲取元素數(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é)點  
  5.     return elem && elem.constructor == String ?  
  6.    document.createTextNode( elem ) : elem;  
  7. }  
  8. </script>  

注意:constructor的用法。

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

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

  1.  <script type="text/javascript"> 
  2. function empty( elem ) {   
  3.  while (elem.firstChild){  
  4.    remove(elem.firstChild);  
  5.  }  
  6.  /*  
  7.  //我們可以使用firstChild來代替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實戰(zhàn):創(chuàng)建和克隆元素
  2. XML DOM新手入門指南
  3. 在JavaScript中如何實現(xiàn)DOM操作 
責(zé)任編輯:王曉東 來源: 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遍歷

2010-09-08 15:47:08

JavsScriptJavaScript

2021-09-09 10:26:26

Javascript 文檔對象前端

2010-09-28 14:12:50

Javascript

2010-09-08 17:26:46

JavaScript

2010-09-28 09:43:37

DOM文檔對象模型

2010-09-28 13:24:34

DOM文檔對象模型

2025-07-03 02:15:00

DOM對象模型JavaScript

2010-09-28 10:03:15

DOM文檔對象模型

2012-04-26 08:29:22

DOM

2010-09-28 11:22:18

Html DOM樹

2017-07-19 14:26:01

前端JavaScriptDOM

2010-09-10 16:21:58

JavaScript

2010-09-28 11:03:19

XML DOM

2019-12-11 09:23:51

JavaScriptHTMLXML

2010-09-15 14:40:07

HTMLposition屬性

2020-12-08 06:19:33

爬蟲Dom樹組件
點贊
收藏

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

主站蜘蛛池模板: 高清人人天天夜夜曰狠狠狠狠 | 欧美一区二 | 国产精品成人一区二区三区 | 欧美日韩国产精品激情在线播放 | 久久视频精品 | 一区二区三区免费在线观看 | 噜噜噜噜狠狠狠7777视频 | 精品久久久久久亚洲综合网 | 日批免费看 | 精品一区二区久久久久久久网精 | 国产精品毛片av | 免费一二区| 精品国产一区二区三区久久久蜜月 | 亚洲欧洲小视频 | 色婷婷综合在线观看 | 日韩一区二区三区在线观看 | 中文成人无字幕乱码精品 | 夜夜摸天天操 | 涩涩视频网站在线观看 | 国产成人综合一区二区三区 | 欧美日韩精品一区二区天天拍 | 卡通动漫第一页 | 午夜伦理影院 | 日本一区二区影视 | 亚洲精品大全 | 黄色一级毛片 | 第一区在线观看免费国语入口 | 成人精品系列 | 日韩小视频 | 色婷婷综合久久久久中文一区二区 | 精品一区二区三区四区 | 国产一区二区视频在线观看 | 69堂永久69tangcom | 亚洲精品视频三区 | 99热最新网址 | 亚洲欧美在线免费观看 | 超碰人人91 | 色综合久久天天综合网 | 91精品国产综合久久久久久首页 | 日韩在线播放视频 | 亚洲精品综合一区二区 |