js AppendChild与insertBefore用法详细对比


Posted in Javascript onDecember 16, 2013

我们知道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最后一个节点。(如要查看DOM,IE可以通过IE Developer Toolbar插件来查看,Firefox可以使用Firebug)

很明显,通过这个例子,可以知道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 相关文章推荐
js 屏蔽鼠标右键脚本附破解方法
Dec 03 Javascript
utf-8编码引起js输出中文乱码的解决办法
Jun 23 Javascript
js 时间函数应用加、减、比较、格式转换的示例代码
Aug 23 Javascript
js插件YprogressBar实现漂亮的进度条效果
Apr 20 Javascript
jquery插件NProgress.js制作网页加载进度条
Jun 05 Javascript
jQuery移动端日期(datedropper)和时间(timedropper)选择器附源码下载
Apr 19 Javascript
原生JS查找元素的方法(推荐)
Nov 22 Javascript
JS实现汉字与Unicode码相互转换的方法详解
Apr 28 Javascript
利用Ionic2 + angular4实现一个地区选择组件
Jul 27 Javascript
Django使用多数据库的方法
Sep 06 Javascript
vue实现文件上传功能
Aug 13 Javascript
Vue父子传递实例讲解
Feb 14 Javascript
js中AppendChild与insertBefore的用法详细解析
Dec 16 #Javascript
JS获取月的最后一天与JS得到一个月份最大天数的实例代码
Dec 16 #Javascript
JS控件ASP.NET的treeview控件全选或者取消(示例代码)
Dec 16 #Javascript
JS冒泡事件的快速解决方法
Dec 16 #Javascript
JS批量操作CSS属性详细解析
Dec 16 #Javascript
js鼠标及对象坐标控制属性详细解析
Dec 14 #Javascript
JS和JQUERY获取页面大小,滚动条位置,元素位置(示例代码)
Dec 14 #Javascript
You might like
PHP通过iconv将字符串从GBK转换为UTF8字符集
2011/07/18 PHP
PHP读取Excel类文件
2017/05/15 PHP
ThinkPHP5分页paginate代码实例解析
2020/11/10 PHP
javascript div 弹出可拖动窗口
2009/02/26 Javascript
原生Js与jquery的多组处理, 仅展开一个区块的折叠效果
2011/01/09 Javascript
jquery 多行文本框(textarea)高度变化
2013/07/03 Javascript
jquery选择器使用详解
2014/04/08 Javascript
JavaScript实现生成GUID(全局统一标识符)
2014/09/05 Javascript
JQuery遍历元素的后代和同胞实现方法
2016/09/18 Javascript
原生JS简单实现ajax的方法示例
2016/11/29 Javascript
移动端脚本框架Hammer.js
2016/12/15 Javascript
angularjs之$timeout指令详解
2017/06/13 Javascript
微信小程序wx:for和wx:for-item的用法详解
2018/04/01 Javascript
关于vue中的ajax请求和axios包问题
2018/04/19 Javascript
AngularJS与后端php的数据交互方法
2018/08/13 Javascript
基于three.js实现的3D粒子动效实例代码
2019/04/09 Javascript
Vue 子组件与数据传递问题及注意事项
2019/07/11 Javascript
详解基于原生JS验证表单组件xy-form
2019/08/20 Javascript
nuxt+axios实现打包后动态修改请求地址的方法
2020/04/22 Javascript
python数据抓取分析的示例代码(python + mongodb)
2017/12/25 Python
python虚拟环境完美部署教程
2019/08/06 Python
Python Scrapy框架第一个入门程序示例
2020/02/05 Python
详解HTML5中ol标签的用法
2015/09/08 HTML / CSS
西班牙英格列斯百货官网:El Corte Inglés
2016/09/25 全球购物
Stuarts London美国/加拿大:世界领先的独立男装零售商之一
2019/03/18 全球购物
花卉与景观设计系大学生求职信
2013/10/01 职场文书
早餐连锁店计划书
2014/01/08 职场文书
2014高考励志标语
2014/06/05 职场文书
体育运动口号
2014/06/09 职场文书
公司授权委托书样本
2014/09/15 职场文书
学校三八妇女节活动总结
2015/02/06 职场文书
Python中的变量与常量
2021/11/11 Python
python自动化测试之Selenium详解
2022/03/13 Python
简单聊聊Golang中defer预计算参数
2022/03/25 Golang
python解析json数据
2022/04/29 Python
Mysql如何查看是否使用到索引
2022/12/24 MySQL