JavaScript DOM实战:创建和克隆元素

开发 前端
理论上上说,通过JavaScript DOM,你可以从树中移除所有的元素,创建新元素,或者重整文档树,从而完全改变页面,但这个特性用起来有些限制,文章将介绍使用JavaScript DOM来创建和克隆元素。

DOM允许你创建自己的元素和文本节点,并把它们添加大文档树中。理论上上说,你可以从树中移除所有的元素,创建新元素,或者重整文档树,从而完全改变页面。但是在实践中,这个特性用起来有些限制。DOM也允许你克隆现有的元素,已便你能方便地复制文档的某一部分并在文档中分发副本。

51CTO推荐阅读:JavaScript DOM的本质及操作方法

createElement()和createTextNode()

createElement()和createTextNode()做的事情正如它们的名字所说的那样。最常见的JavaScript DOM方法实战-修改文档树中已经用过它们。当时的目的是把新创建的元素添加到文档树里,使它成为某个元素的***一个子节点。

  1. //创建一个li新元素  
  2. var newChild=document.createElement('li');  
  3. //创建一个a 新元素  
  4. var newLink=document.createElement('a')  
  5. //创建一个 Text 节点  
  6. var newText=document.createTextNode('My Wiki');  

newChild指向新创建的<li>元素对象,newLink指向新创建的<a>元素对象,而newText指向新创建的文本节点对象。这些节点都还没有被插入文档中。最常见的JavaScript DOM方法实战-修改文档树中,用到的appendChild()或insertBefore()将它们附加到文档树中。例如:

  1. var nav=document.getElementById("nav");  
  2. //创建一个li新元素  
  3. var newChild=document.createElement('li');  
  4. //创建一个a 新元素  
  5. var newLink=document.createElement('a')  
  6. //创建一个 Text 节点  
  7. var newText=document.createTextNode('My Wiki');  
  8. //把Text添加到a元素节点中  
  9. newLink.appendChild(newText);  
  10. //给a元素节点设置属性href和内容  
  11. newLink.setAttribute('href',"#");  
  12. //把a元素节点添加到新的li元素节点中  
  13. newChild.appendChild(newLink);  
  14. //把新的li元素节点添加到 ul 元素节点里  
  15. nav.appendChild(newChild);  

这先将文本节点附加到<a>中,然后再将包含文本节点的<a>附加到<li>中,***把包含<a>和文本的<li>附加到<ul>中。此时我的导航条ul中多了一个li子节点。

createTextNode()和HTML实体

createTextNode()有一个问题:它不能创建类似于&euro;(€ 欧元符号)&yen;(¥ 人民币符号) © (&copy; 版权符号)&#8220;(“左双引号)&#8221;(” 右双引号)等,这样的HTML实体元素。它会按字面创建文本,而不是创建你所需要的符号 。

  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属性的用法,我们会在下一节中作为专题来具体的讨论。

cloneNode()

cloneNode()方法克隆一个节点,即它能对节点做一个***的复制,使你可以在随后将其插入到文档树中。导航条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 表示克隆元素和它的所有子节点。False表示克隆元素但不包含它的子节点。通常,我们在实践中用true,我从来没有遇到过想要克隆一个节点但不包含它的子节点的情形。

2. cloneNode()不会克隆事件处理程序。这相当的让人恼火,不知道这个方法是怎么定义的(原因我也不知道)所以每次你克隆一个节点,你不得不在克隆上重新定义事件处理程序。

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

【编辑推荐】

  1. 大话HTML DOM与XML DOM的区别与联系
  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节点

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

2010-09-13 17:12:55

JavaScript

2021-06-03 10:00:47

JavaScript 前端数克隆对象

2021-03-18 10:45:02

JavaScript数组运算符

2021-11-09 07:59:50

开发

2010-07-05 11:14:32

2010-08-05 13:23:05

NFS协议

2009-09-28 15:50:53

Hibernate创建持久化Product

2012-01-13 12:57:48

Java

2010-08-02 17:24:25

NFS目录

2021-04-09 18:01:03

前端ReactDOM

2010-09-10 16:21:58

JavaScript

2017-07-19 14:26:01

前端JavaScriptDOM

2013-07-21 18:09:21

iOS开发ASIHttpRequ创建和执行reques
点赞
收藏

51CTO技术栈公众号