appendChild() 或 insertBefore()使用与区别介绍


Posted in Javascript onOctober 11, 2013

document.createElement()是在对象中创建一个对象,要与appendChild() 或 insertBefore()方法联合使用。其中,appendChild() 方法在节点的子节点列表末添加新的子节点。insertBefore() 方法在节点的子节点列表任意位置插入新的节点。

下面,举例说明document.createElement()的用法。<div id="board"></div>
例1:

<script type="text/javascript"> 
var board = document.getElementById("board"); 
var e = document.createElement("input"); 
e.type = "button"; 
e.value = "这是测试加载的小例子"; 
var object = board.appendChild(e); 
</script>

效果:在标签board中加载一个按钮,属性值为“这是测试加载的小例子”。

例2:

<script type="text/javascript"> 
var board = document.getElementById("board"); 
var e2 = document.createElement("select"); 
e2.options[0] = new Option("加载项1", ""); 
e2.options[1] = new Option("加载项2", ""); 
e2.size = "2"; 
var object = board.appendChild(e2); 
</script>

效果:在标签board中加载一个下拉列表框,属性值为“加载项1”和“加载项2”。

例3:

<script type="text/javascript"> 
var board = document.getElementById("board"); 
var e3 = document.createElement("input"); 
e4.setAttribute("type", "text"); 
e4.setAttribute("name", "q"); 
e4.setAttribute("value", "使用setAttribute"); 
e4.setAttribute("onclick", "javascript:alert('This is a test!');"); 
var object = board.appendChild(e3); 
</script>

效果:在标签board中加载一个文本框,属性值为“使用setAttribute”。 当点击这个文本框时,会弹出对话框“This is a test!”。

根据上面例子,可以看出,可以通过加载对象的属性来设置,参数是相同的。使用e.type="text" 和 e.setAttribute("type","text")效果是一致的。

下面,我们用实例来讲述一下appendChild() 方法和insertBefore() 方法的不同。
比如我们要在下面这个div中插入一个子节点P时:<div id="test"><p id="x1">Node</p><p>Node</p></div>
我们可以这样写:

<script type="text/javascript"> 
var oTest = document.getElementById("test"); 
var newNode = document.createElement("p"); 
newNode.innerHTML = "This is a test"; 
//测试从这里开始 
//appendChild方法: 
oTest.appendChild(newNode); 
//insertBefore方法: 
oTest.insertBefore(newNode,null); 
</script>

通过以上的代码,可以测试到一个新的节点被创建到了节点div下,且该节点是div最后一个节点。很明显,通过这个例子,可以知道appendChildhild和insertBefore都可以进行插入节点的操作。

在上面的例子中有这样一句代码:oTest.insertBefore(newNode,null) ,这里insertBefore有2个参数可以设置,第一个是和appendChild相同的,第二却是它特有的。它不仅可以为null,还可以为:

<script type="text/javascript"> 
var oTest = document.getElementById("test"); 
var refChild = document.getElementById("x1"); 
var newNode = document.createElement("p"); 
newNode.innerHTML = "This is a test"; 
oTest.insertBefore(newNode,refChild); 
</script>

效果:这个例子将在x1节点前面插入一个新的节点

又或:

<script type="text/javascript"> 
var oTest = document.getElementById("test"); 
var refChild = document.getElementById("x1"); 
var newNode = document.createElement("p"); 
newNode.innerHTML = "This is a test"; 
oTest.insertBefore(newNode,refChild.nextSibling); 
</script>

效果:这个例子将在x1节点的下一个节点前面插入一个新的节点

还可为:

<script type="text/javascript"> 
var oTest = document.getElementById("test"); 
var newNode = document.createElement("p"); 
newNode.innerHTML = "This is a test"; 
oTest.insertBefore(newNode,oTest.childNodes[0]); 
</script>

这个例子将在第一子节点前面插入一个新的节点,也可以通过改变childNodes[0,1,...]来在其它位置插入新的节点
由于可见insertBefore()方法的特性是在已有的子节点前面插入新的节点,但例一中使用insertBefore()方法也可以在子节点列表末插入新节点的。两种情况结合起来,发现insertBefore()方法插入节点,是可以在子节点列表的任意位置。

从这几个例子中得出:
appendChild() 方法在节点的子节点列表末添加新的子节点。
insertBefore() 方法在节点的子节点列表任意位置插入新的节点。

Javascript 相关文章推荐
javascript jQuery插件练习
Dec 24 Javascript
JavaScript定义类的几种方式总结
Jan 06 Javascript
页面元素绑定jquery toggle后元素隐藏的解决方法
Mar 27 Javascript
基于Angularjs实现分页功能
May 30 Javascript
js将table的每个td的内容自动赋值给其title属性的方法
Oct 13 Javascript
详解Javascript函数声明与递归调用
Oct 22 Javascript
微信小程序 基础组件与导航组件详细介绍
Feb 21 Javascript
jQuery实现按比例缩放图片的方法
Apr 29 jQuery
Angular2整合其他插件的方法
Jan 20 Javascript
除Console.log()外更多的Javascript调试命令
Jan 24 Javascript
解决vue scoped scss 无效的问题
Sep 04 Javascript
Javascript 模拟mvc实现点餐程序案例详解
Dec 24 Javascript
JQuery对class属性的操作实现按钮开关效果
Oct 11 #Javascript
鼠标划过实现延迟加载并隐藏层的js代码
Oct 11 #Javascript
javascript自然分类法算法实现代码
Oct 11 #Javascript
jQuery阻止事件冒泡具体实现
Oct 11 #Javascript
JS定时器实例详细分析
Oct 11 #Javascript
jquery 清空file域示例(兼容个浏览器)
Oct 11 #Javascript
jquery左右滚动焦点图banner图片鼠标经过显示上下页按钮
Oct 11 #Javascript
You might like
Win2003下APACHE+PHP5+MYSQL4+PHPMYADMIN 的简易安装配置
2006/11/18 PHP
php FPDF类库应用实现代码
2009/03/20 PHP
php守护进程 加linux命令nohup实现任务每秒执行一次
2011/07/04 PHP
php使用Jpgraph绘制3D饼状图的方法
2015/06/10 PHP
PHP读MYSQL中文乱码的快速解决方法
2016/10/01 PHP
控制打印时页眉角的代码
2007/02/08 Javascript
javascript的对话框详解与参数
2007/03/08 Javascript
Javascript中的String对象详谈
2014/03/03 Javascript
node.js中的fs.utimesSync方法使用说明
2014/12/15 Javascript
jQuery插件ImgAreaSelect实现头像上传预览和裁剪功能实例讲解一
2017/05/26 jQuery
基于node.js express mvc轻量级框架实践
2017/09/14 Javascript
小程序实现录音上传功能
2019/11/22 Javascript
JavaScript枚举选择jquery插件代码实例
2020/11/17 jQuery
[36:16]完美世界DOTA2联赛PWL S3 access vs Rebirth 第一场 12.19
2020/12/24 DOTA
python使用xlrd与xlwt对excel的读写和格式设定
2017/01/21 Python
Pycharm学习教程(5) Python快捷键相关设置
2017/05/03 Python
Python正则表达式常用函数总结
2017/06/24 Python
Python网络编程 Python套接字编程
2017/09/13 Python
python打包exe开机自动启动的实例(windows)
2019/06/28 Python
使用sklearn的cross_val_score进行交叉验证实例
2020/02/28 Python
python 在sql语句中使用%s,%d,%f说明
2020/06/06 Python
详解基于canvas的视频遮罩插件
2018/01/04 HTML / CSS
巴西最大的家电和百货零售商:Casas Bahia
2016/11/22 全球购物
如何用JQuery进行表单验证
2013/05/29 面试题
总务岗位职责
2013/11/19 职场文书
高一自我鉴定
2013/12/17 职场文书
人力资源部培训专员岗位职责
2014/01/02 职场文书
档案接收函范文
2014/01/10 职场文书
青年志愿者事迹材料
2014/02/07 职场文书
车队司机自我鉴定
2014/03/02 职场文书
另类冲刺标语
2014/06/24 职场文书
人事主管岗位职责
2015/02/04 职场文书
逃课检讨书范文
2015/05/06 职场文书
小学课改工作总结
2015/08/13 职场文书
分析ZooKeeper分布式锁的实现
2021/06/30 Java/Android
SQL实现LeetCode(175.联合两表)
2021/08/04 MySQL