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 相关文章推荐
HTA版JSMin(省略修饰语若干)基于javascript语言编写
Dec 24 Javascript
JS获取html对象的几种方式介绍
Dec 05 Javascript
javascript动态判断html元素并执行不同的操作
Jun 16 Javascript
jQuery焦点图切换特效代码分享
Sep 15 Javascript
JavaScript知识点总结(四)之逻辑OR运算符详解
May 31 Javascript
javascript使用btoa和atob来进行Base64转码和解码
Mar 20 Javascript
Vue数组更新及过滤排序功能
Aug 10 Javascript
微信小程序ibeacon三点定位详解
Oct 31 Javascript
VUE解决微信签名及SPA微信invalid signature问题(完美处理)
Mar 29 Javascript
vue限制输入框只能输入8位整数和2位小数的代码
Nov 06 Javascript
微信小程序如何获取地址
Dec 24 Javascript
vue实现图片裁剪后上传
Dec 16 Vue.js
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 smarty函数扩展
2010/03/15 PHP
Yii2创建表单(ActiveForm)方法详解
2016/07/23 PHP
php 判断字符串编码是utf-8 或gb2312实例
2016/11/01 PHP
js异步加载的三种解决方案
2013/03/04 Javascript
JS在textarea光标处插入文本的小例子
2013/03/22 Javascript
javascript实现倒计时N秒后网页自动跳转代码
2014/12/11 Javascript
jQuery中:last-child选择器用法实例
2014/12/31 Javascript
jQuery中appendTo()方法用法实例
2015/01/08 Javascript
js跨域资源共享 基础篇
2016/07/02 Javascript
jQuery插件dataTables添加序号列的方法
2016/07/06 Javascript
js与jquery分别实现tab标签页功能的方法
2016/11/18 Javascript
Angularjs 双向绑定时字符串的转换成数字类型的问题
2017/06/12 Javascript
node.js自动上传ftp的脚本分享
2018/06/16 Javascript
vue router总结 $router和$route及router与 router与route区别
2019/07/05 Javascript
如何HttpServletRequest文件对象并储存
2020/08/14 Javascript
jQuery实现简单轮播图效果
2020/12/27 jQuery
[04:49]期待西雅图之战 2016国际邀请赛中国区预选赛WINGS战队赛后采访
2016/06/29 DOTA
在Python程序中操作文件之flush()方法的使用教程
2015/05/24 Python
运动检测ViBe算法python实现代码
2018/01/09 Python
利用python的socket发送http(s)请求方法示例
2018/05/07 Python
基于数据归一化以及Python实现方式
2018/07/11 Python
python单例模式实例解析
2018/08/28 Python
python实现自动解数独小程序
2019/01/21 Python
简单了解python变量的作用域
2019/07/30 Python
python getpass实现密文实例详解
2019/09/24 Python
Python实现异步IO的示例
2020/11/05 Python
基于PyTorch中view的用法说明
2021/03/03 Python
css3实现小箭头各种图形效果
2020/07/08 HTML / CSS
CSS3制作3D立方体loading特效
2020/11/09 HTML / CSS
加拿大购物频道:The Shopping Channel
2016/07/21 全球购物
Betsey Johnson官网:妖娆可爱的连衣裙及鞋子、手袋和配件
2016/12/30 全球购物
日本食品网上商店:JaponShop.com
2017/11/28 全球购物
培训自我鉴定
2014/01/31 职场文书
新员工考核评语
2014/12/31 职场文书
教师节感谢信
2015/01/22 职场文书
Python IO文件管理的具体使用
2022/03/20 Python