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; 版权符号)“(“左双引号)”(” 右双引号)等,这样的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()不会克隆事件处理程序。这相当的让人恼火,不知道这个方法是怎么定义的(原因我也不知道)所以每次你克隆一个节点,你不得不在克隆上重新定义事件处理程序。

JavaScript DOM实战:创建和克隆元素的更多相关文章

  1. JavaScript DOM动态创建(声明)Object元素

    http://www.cnblogs.com/GuominQiu/archive/2011/04/01/2002783.html 一文提及“等整个页面加载完毕后,根据用户所选的阅读机类型,再用Java ...

  2. Javascript:DOM动态创建元素实例应用

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. JavaScript dom 动态创建标记

    此前的大多数DOM都是用来查找元素,getElementById和getElementsByTagName都可以方便快捷的找到文档中的某个或者某些特定的元素节点,这些元素随后可以用诸如setAttri ...

  4. JavaScript DOM三种创建元素的方式

    三种创建元素的方式: document.write() element.innerHTML document.createElement() 初始HTML内容: <button>btn&l ...

  5. Javascript DOM 02 在<ul>中创建、删除 <li>

    创建DOM元素 createElement(标签名)  创建一个节点 appendChild(节点)  追加一个节点 例子:为ul插入li 插入元素 insertBefore(节点, 原有节点)  在 ...

  6. DOM操作-克隆元素

    代码: ———————————————————————————— <script type="text/javascript">            //克隆元素   ...

  7. JavaScript进阶 - 第9章 DOM对象,控制HTML元素

    第9章 DOM对象,控制HTML元素 9-1 认识DOM 文档对象模型DOM(Document Object Model)定义访问和处理HTML文档的标准方法.DOM 将HTML文档呈现为带有元素.属 ...

  8. webAPI(DOM) 2.1 获取页面元素 | 事件1 | 属性操作 | 节点 | 创建元素 | 事件2

    js分三个部分: ECMAScript标准:js的基本语法 DOM:Ducument Object Model--->文档对象模型--->操作页面的元素 BOM:Browser Objec ...

  9. JavaScript学习笔记 - 进阶篇(8)- DOM对象,控制HTML元素

    认识DOM 文档对象模型DOM(Document Object Model)定义访问和处理HTML文档的标准方法.DOM 将HTML文档呈现为带有元素.属性和文本的树结构(节点树). 先来看看下面代码 ...

随机推荐

  1. Java 字符编码归纳总结

    String newStr = new String(oldStr.getBytes(), "UTF-8");       java中的String类是按照unicode进行编码的 ...

  2. IIS8中 出现ashx 401:未授权,uploadify上传文件失败

    环境:阿里云服务器 windows2012  + IIS8 +asp.net 访问IIS 出现能正常访问aspx页面,但是通过ajax访问ashx上传文件的时候就出现ashx  Status Code ...

  3. 版本控制 - SVN/TortoiseSVN

    研读了blog: 1. http://www.open-open.com/lib/view/open1346982569725.html  2. http://www.360doc.com/conte ...

  4. 使用TCP协议的NAT穿透技术

    一直以来,说起NAT穿透,很多人都会被告知使用UDP打孔这个技术,基本上没有人会告诉你如何使用TCP协议去穿透(甚至有的人会直接告诉你TCP协议是无法实现穿透的).但是,众所周知的是,UDP是一个无连 ...

  5. JavaScript之工厂方式 构造函数方式 原型方式讲解

    一.工厂方式可以为一个对象,创建多个实例. var oCar = new Object; oCar.color = "red"; oCar.doors=4; oCar.mpg=23 ...

  6. “System.Data.Entity.Internal.AppConfig"的类型初始值设定项引发异常。{转}

    <connectionStrings> <add name="ConnectionStringName" providerName="System.Da ...

  7. ibatis中iterate的用法(conjunction="or" ",")

    例子一 查询条件dto public class queryCondition{ private String[] stuIds; private String name;} 查询sqlMap < ...

  8. Android Environment FAQ (Frequently Asked Question)

    1.how to find out the Eclipse Version From Eclipse Menu Help ----> About Eclipse It displayed as ...

  9. Fbric、Ansible、Docker、Chaos Monkey:DevOps工具的年中回顾

    Fbric.Ansible.Docker.Chaos Monkey:DevOps工具的年中回顾 [编者按]近日,Cyber Engineering Solutions Group 技术经理 Hasan ...

  10. 游戏引擎网络开发者的64做与不做(二A):协议与API

    [编者按]在这个系列之前的文章"游戏引擎网络开发者的64做与不做(一):客户端方面"中,Sergey介绍了游戏引擎添加网络支持时在客户端方面的注意点.本文,Sergey则将结合实战 ...