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 相关文章推荐
利用jQuery的$.event.fix函数统一浏览器event事件处理
Dec 21 Javascript
jquery上传插件fineuploader上传文件使用方法(jquery图片上传插件)
Dec 05 Javascript
Jquery 实现图片轮换
Jan 28 Javascript
JS获取iframe中marginHeight和marginWidth属性的方法
Apr 01 Javascript
javascript实现获取浏览器版本、浏览器类型
Dec 02 Javascript
通过网页查看JS源码中汉字显示乱码的解决方法
Oct 26 Javascript
JS实现页面打印功能
Mar 16 Javascript
微信小程序图片横向左右滑动案例
May 19 Javascript
实例解析Vue.js下载方式及基本概念
May 11 Javascript
使用Jenkins部署React项目的方法步骤
Mar 11 Javascript
返回上一个url并刷新界面的js代码
Sep 12 Javascript
JavaScript async/await原理及实例解析
Dec 02 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网页游戏学习之Xnova(ogame)源码解读(十六)
2014/06/30 PHP
PHP连接MYSQL数据库实例代码
2016/01/20 PHP
PHP数组基本用法与知识点总结
2020/06/02 PHP
MultiSelect左右选择控件的设计与实现介绍
2013/06/08 Javascript
让jQuery Mobile不显示讨厌loading界面的方法
2014/02/19 Javascript
jQuery filter函数使用方法
2014/05/19 Javascript
javascript实现阻止iOS APP中的链接打开Safari浏览器
2014/06/12 Javascript
js构造函数、索引数组和属性的实现方式和使用
2014/11/16 Javascript
JSONObject使用方法详解
2015/12/17 Javascript
jQuery基本选择器之标签名选择器
2016/09/03 Javascript
React组件的三种写法总结
2017/01/12 Javascript
JS使用插件cryptojs进行加密解密数据实例
2017/05/11 Javascript
最实用的JS数组函数整理
2017/12/05 Javascript
详解node Async/Await 更好的异步编程解决方案
2018/05/10 Javascript
微信小程序wepy框架笔记小结
2018/08/08 Javascript
js限制输入框只能输入数字(onkeyup触发)
2018/09/28 Javascript
实用的Vue开发技巧
2019/05/30 Javascript
vue实现axios图片上传功能
2019/08/20 Javascript
从零搭一个自用的前端脚手架的方法步骤
2019/09/23 Javascript
在vue中使用防抖和节流,防止重复点击或重复上拉加载实例
2019/11/13 Javascript
小程序实现简单语音聊天的示例代码
2020/07/24 Javascript
Vue+element+cookie记住密码功能的简单实现方法
2020/09/20 Javascript
Django添加favicon.ico图标的示例代码
2018/08/07 Python
Python笔记之代理模式
2019/11/20 Python
一套PHP的笔试题
2013/05/31 面试题
C语言中一个结构不能包含指向自己的指针吗
2012/05/25 面试题
若干个Java基础面试题
2015/05/19 面试题
德尔福集团DELPHI的笔试题
2012/02/22 面试题
生物科学专业个人求职信范文
2013/12/05 职场文书
工作表现自我评价
2014/02/08 职场文书
党员个人总结自评
2015/02/14 职场文书
幼儿园安全工作总结2015
2015/04/20 职场文书
文明礼仪倡议书
2015/04/28 职场文书
创业计划书之个人工作室
2019/08/22 职场文书
Spring Boot 底层原理基础深度解析
2022/04/03 Java/Android
MySQL数据库表约束讲解
2022/06/21 MySQL