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

JavaScript DOM實戰(zhàn):創(chuàng)建和克隆元素

開發(fā) 前端
理論上上說,通過JavaScript DOM,你可以從樹中移除所有的元素,創(chuàng)建新元素,或者重整文檔樹,從而完全改變頁面,但這個特性用起來有些限制,文章將介紹使用JavaScript DOM來創(chuàng)建和克隆元素。

DOM允許你創(chuàng)建自己的元素和文本節(jié)點,并把它們添加大文檔樹中。理論上上說,你可以從樹中移除所有的元素,創(chuàng)建新元素,或者重整文檔樹,從而完全改變頁面。但是在實踐中,這個特性用起來有些限制。DOM也允許你克隆現有的元素,已便你能方便地復制文檔的某一部分并在文檔中分發(fā)副本。

51CTO推薦閱讀:JavaScript DOM的本質及操作方法

createElement()和createTextNode()

createElement()和createTextNode()做的事情正如它們的名字所說的那樣。最常見的JavaScript DOM方法實戰(zhàn)-修改文檔樹中已經用過它們。當時的目的是把新創(chuàng)建的元素添加到文檔樹里,使它成為某個元素的***一個子節(jié)點。

  1. //創(chuàng)建一個li新元素  
  2. var newChild=document.createElement('li');  
  3. //創(chuàng)建一個a 新元素  
  4. var newLink=document.createElement('a')  
  5. //創(chuàng)建一個 Text 節(jié)點  
  6. var newText=document.createTextNode('My Wiki');  

newChild指向新創(chuàng)建的<li>元素對象,newLink指向新創(chuàng)建的<a>元素對象,而newText指向新創(chuàng)建的文本節(jié)點對象。這些節(jié)點都還沒有被插入文檔中。最常見的JavaScript DOM方法實戰(zhàn)-修改文檔樹中,用到的appendChild()或insertBefore()將它們附加到文檔樹中。例如:

  1. var nav=document.getElementById("nav");  
  2. //創(chuàng)建一個li新元素  
  3. var newChild=document.createElement('li');  
  4. //創(chuàng)建一個a 新元素  
  5. var newLink=document.createElement('a')  
  6. //創(chuàng)建一個 Text 節(jié)點  
  7. var newText=document.createTextNode('My Wiki');  
  8. //把Text添加到a元素節(jié)點中  
  9. newLink.appendChild(newText);  
  10. //給a元素節(jié)點設置屬性href和內容  
  11. newLink.setAttribute('href',"#");  
  12. //把a元素節(jié)點添加到新的li元素節(jié)點中  
  13. newChild.appendChild(newLink);  
  14. //把新的li元素節(jié)點添加到 ul 元素節(jié)點里  
  15. nav.appendChild(newChild);  

這先將文本節(jié)點附加到<a>中,然后再將包含文本節(jié)點的<a>附加到<li>中,***把包含<a>和文本的<li>附加到<ul>中。此時我的導航條ul中多了一個li子節(jié)點。

createTextNode()和HTML實體

createTextNode()有一個問題:它不能創(chuàng)建類似于&euro;(€ 歐元符號)&yen;(¥ 人民幣符號) © (&copy; 版權符號)&#8220;(“左雙引號)&#8221;(” 右雙引號)等,這樣的HTML實體元素。它會按字面創(chuàng)建文本,而不是創(chuàng)建你所需要的符號 。

  1. <script  type="text/javascript"> 
  2. window.onload=function(){  
  3.  var x=document.createTextNode("&copy; Copyrights reserved");  
  4.  document.getElementById("test").appendChild(x);  
  5. }  
  6. </script>  

不過,我們可以使用innerHTML來代替:

  1. <script  type="text/javascript"> 
  2. window.onload=function(){   
  3. document.getElementById("test").innerHTML="&copy; 
  4. Copyrights reserved";  
  5. }  
  6. </script>  

關于innerHTML屬性的用法,我們會在下一節(jié)中作為專題來具體的討論。

cloneNode()

cloneNode()方法克隆一個節(jié)點,即它能對節(jié)點做一個***的復制,使你可以在隨后將其插入到文檔樹中。導航條HTML代碼:

  1. <div id="menu"> 
  2.     <h1>我的導航條</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>  

測試cloneNode()

  1. <script  type="text/javascript"> 
  2. window.onload=function(){  
  3.      var nav_list=[];  
  4.   var nav=document.getElementById("nav");  
  5.      navnav_list=nav.getElementsByTagName("li");  
  6.   var x=nav_list[0];  
  7.   var y=x.cloneNode(true);  
  8.   nav.appendChild(y);  
  9. }  
  10. </script> 

要想正確的使用cloneNode(),你必須了解它的一下二個特征:

1. cloneNode()接受一個可選值為true或false的參數。True 表示克隆元素和它的所有子節(jié)點。False表示克隆元素但不包含它的子節(jié)點。通常,我們在實踐中用true,我從來沒有遇到過想要克隆一個節(jié)點但不包含它的子節(jié)點的情形。

2. cloneNode()不會克隆事件處理程序。這相當的讓人惱火,不知道這個方法是怎么定義的(原因我也不知道)所以每次你克隆一個節(jié)點,你不得不在克隆上重新定義事件處理程序。

原文地址:http://cssrainbow.cn/tutorials/javascript/589.html

【編輯推薦】

  1. 大話HTML DOM與XML DOM的區(qū)別與聯系
  2. XML DOM新手入門指南
  3. JavaScript DOM的本質及操作方法 
責任編輯:王曉東 來源: cssrainbow
相關推薦

2010-09-13 14:24:17

JavaScript

2010-09-28 13:40:52

DOM元素

2010-09-13 16:46:29

JavaScriptHTML DOM節(jié)點

2024-01-17 08:00:56

LVM磁盤Linux

2010-01-25 11:28:59

2010-09-08 17:26:46

JavaScript

2010-09-28 14:12:50

Javascript

2021-06-03 10:00:47

JavaScript 前端數克隆對象

2010-09-13 17:12:55

JavaScript

2021-03-18 10:45:02

JavaScript數組運算符

2021-04-09 18:01:03

前端ReactDOM

2012-01-13 12:57:48

Java

2010-08-02 17:24:25

NFS目錄

2009-09-28 15:50:53

Hibernate創(chuàng)建持久化Product

2010-08-05 13:23:05

NFS協(xié)議

2010-07-05 11:14:32

2021-11-09 07:59:50

開發(fā)

2017-07-19 14:26:01

前端JavaScriptDOM

2010-09-10 16:21:58

JavaScript

2014-05-26 16:29:12

Shadow DomWeb Compone
點贊
收藏

51CTO技術棧公眾號