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. adb 连接时 device offline

    继上一篇博文,会发现最后图片上 adb连接时候提示device offline 以下三种方法可以试一下~我是试到最后一种才成功 1.重启手机 2.adb kill-server    adb star ...

  2. 用PHP对数据库内容进行操作(改)

    查询页面(用户可见) <body> <table width="80%" border="1" cellpadding="0&quo ...

  3. 【BZOJ】【1717】【USACO 2006 Dec】Milk Patterns产奶的模式

    后缀数组 o(︶︿︶)o 唉傻逼了一下,忘了把后缀数组的字典范围改回20001,直接21交了上去,白白RE了两发……sigh 既然要找出现了K次的子串嘛,那当然要用后缀数组了>_>(因为我 ...

  4. Leetcode#166 Fraction to Recurring Decimal

    原题地址 计算循环小数 先把负数转化成正数,然后计算,最后添加符号 当被除数重复出现的时候,说明开始循环了,所以用一个map保存所有遇到的被除数 需要考虑溢出问题,这也是本题最恶心的地方,看看通过率吧 ...

  5. ajax 乱码

    1. 在页面的中文变量前添加encodeURIComponent() $.ajax({ type: "POST", url: "", data:{   id:e ...

  6. windows 7 下快速搭建php环境 windows7+IIS7+php

    1.       安装IIS v7.0 控制面板-程序和功能-打开或关闭Windows 功能 测试是否成功安装IIS v7.0,在浏览器输入:http://localhost/ 或者http://12 ...

  7. Codeforces Round #266 (Div. 2) D

    D. Increase Sequence time limit per test 1 second memory limit per test 256 megabytes input standard ...

  8. vs2010创建并使用DLL

    一.为什么需要dll 代码复用是提高软件开发 效率的重要途径.一般而言,只要某部分代码具有通用性,就可将它构造成相对独立的功能模块并在之后的项目中重复使用.比较常见的例子是各种应用程序框架, 如ATL ...

  9. Long和Date数据类型之间相互转换代码

    static final SimpleDateFormat DATETIME_SEC_STR = new SimpleDateFormat("yyyyMMddHHmmss"); 1 ...

  10. Sqli-labs less 17

    Less-17 本关我们可以看到是一个修改密码的过程,利用的是update语句,与在用select时是一样的,我们仅需要将原先的闭合,构造自己的payload. 尝试报错 Username:admin ...