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 相关文章推荐
js中根据字数截取字符串,不能截断url
Jan 12 Javascript
Node.js生成HttpStatusCode辅助类发布到npm
Apr 09 Javascript
js判断手机端(Android手机还是iPhone手机)
Jul 22 Javascript
配置Grunt的Task时通配符支持和动态生成文件名问题
Sep 06 Javascript
JS模拟的Map类实现方法
Jun 17 Javascript
vuejs响应用户事件(如点击事件)
Mar 14 Javascript
浅谈React Native Flexbox布局(小结)
Jan 08 Javascript
layer的prompt弹出框,点击回车,触发确定事件的方法
Sep 06 Javascript
微信小程序wxs实现吸顶效果
Jan 08 Javascript
Vue 一键清空表单的实现方法
Feb 07 Javascript
小程序瀑布流组件实现翻页与图片懒加载
May 19 Javascript
使用 UniApp 实现小程序的微信登录功能
Jun 09 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面向对象五大原则之接口隔离原则(ISP)详解
2018/04/04 PHP
项目实践之javascript技巧
2007/12/06 Javascript
jquery实现智能感知连接外网搜索
2013/05/21 Javascript
zTree插件之多选下拉菜单实例代码
2013/11/06 Javascript
返回上一页并自动刷新的JavaScript代码
2014/02/19 Javascript
js获取客户端网卡的IP地址、MAC地址
2014/03/26 Javascript
Extjs Label的 fieldLabel和html属性值对齐的方法
2014/06/15 Javascript
JS跨域问题详解
2014/11/25 Javascript
jQuery实现的网页竖向菜单效果代码
2015/08/26 Javascript
js中实现字符串和数组的相互转化详解
2016/01/24 Javascript
AngularJS实现分页显示数据库信息
2016/07/01 Javascript
最全面的百度地图JavaScript离线版开发
2016/09/10 Javascript
JavaScript Ajax实现异步通信
2016/12/14 Javascript
详解swipe使用及竖屏页面滚动方法
2018/06/28 Javascript
关于NodeJS中的循环引用详解
2019/07/23 NodeJs
layui动态加载多表头的实例
2019/09/05 Javascript
JS实现动态无缝轮播
2020/01/11 Javascript
[06:10]6.81新信使新套装!给你一个炫酷的DOTA2
2014/05/06 DOTA
Python中列表、字典、元组数据结构的简单学习笔记
2016/03/20 Python
简述Python2与Python3的不同点
2018/01/21 Python
python3使用SMTP发送简单文本邮件
2018/06/19 Python
Python3 解决读取中文文件txt编码的问题
2019/12/20 Python
python实现ftp文件传输功能
2020/03/20 Python
解决pip安装的第三方包在PyCharm无法导入的问题
2020/10/15 Python
PyQt5通过信号实现MVC的示例
2021/02/06 Python
美国网上订购鲜花:FTD
2016/09/23 全球购物
英国和世界各地鲜花速递专家:Arena Flowers
2018/02/10 全球购物
党校培训思想汇报
2014/01/03 职场文书
导师就业推荐信范文
2014/05/22 职场文书
2014年教师节演讲稿范文
2014/09/10 职场文书
反对四风问题自我剖析材料
2014/09/29 职场文书
民主评议党员总结
2014/10/20 职场文书
小学生毕业评语
2014/12/26 职场文书
北京天坛导游词
2015/02/12 职场文书
销售辞职信范文
2015/03/02 职场文书
2015年收银员个人工作总结
2015/04/01 职场文书