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 相关文章推荐
通过event对象的fromElement属性解决热区设置主实体的一个bug
Dec 22 Javascript
myeclipse安装jQuery插件的方法
Mar 29 Javascript
禁止页面刷新让F5快捷键及右键都无效
Jan 22 Javascript
JavaScript中的全局对象介绍
Jan 01 Javascript
深入学习JavaScript中的原型prototype
Aug 13 Javascript
jquery实现倒计时功能
Dec 28 Javascript
理解javascript async的用法
Aug 22 Javascript
动态统计当前输入内容的字节、字符数的实例详解
Oct 27 Javascript
Vue2.0 实现歌手列表滚动及右侧快速入口功能
Aug 08 Javascript
React 使用recharts实现散点地图的示例代码
Dec 07 Javascript
微信小程序制作扭蛋机代码实例
Sep 24 Javascript
vue 实现图片懒加载功能
Dec 31 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闭包(Closure)使用详解
2013/05/02 PHP
thinkphp的c方法使用示例
2014/02/24 PHP
php的memcache类分享(memcache队列)
2014/03/26 PHP
PHP中如何防止外部恶意提交调用ajax接口
2016/04/11 PHP
Laravel框架模板加载,分配变量及简单路由功能示例
2018/06/11 PHP
javascript Zifa FormValid 0.1表单验证 代码打包下载
2007/06/08 Javascript
用js实现随机返回数组的一个元素
2007/08/13 Javascript
JavaScript入门教程(10) 认识其他对象
2009/01/31 Javascript
浅谈bootstrap源码分析之tab(选项卡)
2016/06/06 Javascript
简单谈谈ES6的六个小特性
2016/11/18 Javascript
jQuery File Upload文件上传插件使用详解
2016/12/06 Javascript
深入理解Nodejs Global 模块
2017/06/03 NodeJs
js简易版购物车功能
2017/06/17 Javascript
js CSS3实现卡牌旋转切换效果
2017/07/04 Javascript
微信小程序-滚动消息通知的实例代码
2017/08/03 Javascript
详解从Vue.js源码看异步更新DOM策略及nextTick
2017/10/11 Javascript
nodejs的安装使用与npm的介绍
2019/09/11 NodeJs
Vue.js组件通信之自定义事件详解
2019/10/19 Javascript
vue中使用WX-JSSDK的两种方法(推荐)
2020/01/18 Javascript
超详细小程序定位地图模块全系列开发教学
2020/11/24 Javascript
[19:15]DK战队纪录片
2014/09/02 DOTA
一篇不错的Python入门教程
2007/02/08 Python
Flask框架中密码的加盐哈希加密和验证功能的用法详解
2016/06/07 Python
Python做文本按行去重的实现方法
2016/10/19 Python
python实现跨excel的工作表sheet之间的复制方法
2018/05/03 Python
python3连接MySQL数据库实例详解
2018/05/24 Python
Python 实现数据结构中的的栈队列
2019/05/16 Python
详解numpy矩阵的创建与数据类型
2019/10/18 Python
什么是WEB控件?使用WEB控件有哪些优势?
2012/01/21 面试题
工商治理实习生的自我评价
2014/01/15 职场文书
庆祝教师节活动方案
2014/01/31 职场文书
班主任对学生的评语
2014/04/26 职场文书
入党综合考察材料
2014/06/02 职场文书
2014年学校食堂工作总结
2014/11/25 职场文书
django学习之ajax post传参的2种格式实例
2021/05/14 Python
MySQL为数据表建立索引的原则详解
2022/03/03 MySQL