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 相关文章推荐
JSCode all of Brower 全局屏蔽网页右键功能 具体实现
Jun 05 Javascript
jQuery实现html表格动态添加新行的方法
May 28 Javascript
jQuery页面元素动态添加后绑定事件丢失方法,非 live
Jun 16 Javascript
js调用屏幕宽度的简单方法
Nov 14 Javascript
Three.js的使用及绘制基础3D图形详解
Apr 27 Javascript
EasyUI Datebox 日期验证之开始日期小于结束时间
May 19 Javascript
js+html制作简单日历的方法
Jun 27 Javascript
vue中实现在外部调用methods的方法(推荐)
Feb 08 Javascript
vue.js分页中单击页码更换页面内容的方法(配合spring springmvc)
Feb 10 Javascript
JSON数据中存在单个转义字符“\”的处理方法
Jul 11 Javascript
js+html实现点名系统功能
Nov 05 Javascript
浅谈javascript事件环微任务和宏任务队列原理
Sep 12 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
php max_execution_time执行时间问题
2011/07/17 PHP
ThinkPHP的MVC开发机制实例解析
2014/08/23 PHP
php实现的SSO单点登录系统接入功能示例分析
2016/10/12 PHP
php+redis实现消息队列功能示例
2019/09/19 PHP
js中top、clientTop、scrollTop、offsetTop的区别 文字详细说明版
2011/01/08 Javascript
JavaScript ( (__ = !$ + $)[+$] + ({} + $)[_/_] +({} + $)[_/_] )
2011/02/25 Javascript
谈谈Jquery ajax中success和complete有哪些不同点
2015/11/20 Javascript
jQuery操作基本控件方法实例分析
2015/12/31 Javascript
jquery html5 视频播放控制代码
2016/11/06 Javascript
js实现右键自定义菜单
2016/12/03 Javascript
mescroll.js上拉加载下拉刷新组件使用详解
2017/11/13 Javascript
基于Vue+element-ui 的Table二次封装的实现
2018/07/20 Javascript
JS实现面向对象继承的5种方式分析
2018/07/21 Javascript
JSON.stringify()方法讲解
2019/01/31 Javascript
详解javascript 变量提升(Hoisting)
2019/03/12 Javascript
Ant-design-vue Table组件customRow属性的使用说明
2020/10/28 Javascript
[06:53]DOTA2每周TOP10 精彩击杀集锦vol.3
2014/06/25 DOTA
python根据时间生成mongodb的ObjectId的方法
2015/03/13 Python
使用Python标准库中的wave模块绘制乐谱的简单教程
2015/03/30 Python
python http接口自动化脚本详解
2018/01/02 Python
Python中作用域的深入讲解
2018/12/10 Python
Python中三元表达式的几种写法介绍
2019/03/04 Python
python操作文件的参数整理
2019/06/11 Python
PyCharm刷新项目(文件)目录的实现
2020/02/14 Python
意大利婴儿产品网上商店:Mukako
2018/10/14 全球购物
大四学生毕业自荐信
2013/11/07 职场文书
大学社团活动策划书
2014/01/26 职场文书
公司晚会主持词
2014/03/22 职场文书
毕业寄语大全
2014/04/09 职场文书
建筑施工安全生产责任书
2014/07/22 职场文书
公司股份转让协议书范本
2015/01/28 职场文书
个人年终总结范文
2015/03/09 职场文书
2016应届毕业生实习心得体会
2015/10/09 职场文书
php实例化对象的实例方法
2021/11/17 PHP
前端监听websocket消息并实时弹出(实例代码)
2021/11/27 Javascript
DE1103使用报告
2022/04/05 无线电