JavaScript DOM实战:创建和克隆元素
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()有一个问题:它不能创建类似于€(€ 欧元符号)¥(¥ 人民币符号) © (© 版权符号)“(“左双引号)”(” 右双引号)等,这样的HTML实体元素。它会按字面创建文本,而不是创建你所需要的符号 。
1. <script type="text/javascript">
2. window.onload=function(){
3. var x=document.createTextNode("© 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="©
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实战:创建和克隆元素的更多相关文章
- JavaScript DOM动态创建(声明)Object元素
http://www.cnblogs.com/GuominQiu/archive/2011/04/01/2002783.html 一文提及“等整个页面加载完毕后,根据用户所选的阅读机类型,再用Java ...
- Javascript:DOM动态创建元素实例应用
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- JavaScript dom 动态创建标记
此前的大多数DOM都是用来查找元素,getElementById和getElementsByTagName都可以方便快捷的找到文档中的某个或者某些特定的元素节点,这些元素随后可以用诸如setAttri ...
- JavaScript DOM三种创建元素的方式
三种创建元素的方式: document.write() element.innerHTML document.createElement() 初始HTML内容: <button>btn&l ...
- Javascript DOM 02 在<ul>中创建、删除 <li>
创建DOM元素 createElement(标签名) 创建一个节点 appendChild(节点) 追加一个节点 例子:为ul插入li 插入元素 insertBefore(节点, 原有节点) 在 ...
- DOM操作-克隆元素
代码: ———————————————————————————— <script type="text/javascript"> //克隆元素 ...
- JavaScript进阶 - 第9章 DOM对象,控制HTML元素
第9章 DOM对象,控制HTML元素 9-1 认识DOM 文档对象模型DOM(Document Object Model)定义访问和处理HTML文档的标准方法.DOM 将HTML文档呈现为带有元素.属 ...
- webAPI(DOM) 2.1 获取页面元素 | 事件1 | 属性操作 | 节点 | 创建元素 | 事件2
js分三个部分: ECMAScript标准:js的基本语法 DOM:Ducument Object Model--->文档对象模型--->操作页面的元素 BOM:Browser Objec ...
- JavaScript学习笔记 - 进阶篇(8)- DOM对象,控制HTML元素
认识DOM 文档对象模型DOM(Document Object Model)定义访问和处理HTML文档的标准方法.DOM 将HTML文档呈现为带有元素.属性和文本的树结构(节点树). 先来看看下面代码 ...
随机推荐
- Java实现文件压缩与解压[zip格式,gzip格式]
Java实现ZIP的解压与压缩功能基本都是使用了Java的多肽和递归技术,可以对单个文件和任意级联文件夹进行压缩和解压,对于一些初学者来说是个很不错的实例. zip扮演着归档和压缩两个角色:gzip并 ...
- android实现左右滑动菜单
直接看效果图: 主要实现代码: package com.way.view; import android.content.Context; import android.media.Den ...
- asp.net中下载文件的问题
今天解决web的文件下载问题,下载的方法网上很多,不过我的下载有点特殊: 1.下载按钮在gridview中,是模板列的linkButton: 2.使用了ajax控件: 所以,在下载时总是报错,通过查找 ...
- HTML5表单学习笔记
表单在网页设计中的作用非常重要,HTML5又增加了表单方面的诸多功能,包括增加input输入类型,input属性,form元素,form属性等,解决了我们以前比较头疼或者繁琐的功能. 新增的输入类型 ...
- Ubuntu 部署 Redmine
我是在虚拟机种安装的Ubuntu,原因是装双系统太麻烦,虚拟机有问题的话删除容易. 首选保证主机中能ping 通虚拟机.我是用的桥接. 1.ubuntu安装必备的软件: sudo apt-get in ...
- Codeforces Beta Round #80 (Div. 1 Only) D. Time to Raid Cowavans 离线+分块
题目链接: http://codeforces.com/contest/103/problem/D D. Time to Raid Cowavans time limit per test:4 sec ...
- 01.Redis安装
1.安装Redis 1.下载.解压Redis [lizhiwei@localhost Redis]$ ll total 1248 -rwxrwxr-x. 1 lizhiwei lizhiwei 127 ...
- On Explainability of Deep Neural Networks
On Explainability of Deep Neural Networks « Learning F# Functional Data Structures and Algorithms is ...
- cts 测试环境安装 ubuntu
1 下载cts测试包 和 sdk 包 http://source.android.com/compatibility/downloads.html ----cts 包 http://develope ...
- Extjs文本输入框
var loginForm = Ext.create('Ext.form.Panel', { title: '单行输入', renderTo: Ext.getBody( ...