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的jqDnR拖拽溢出的修改
Feb 12 Javascript
JavaScript 垃圾回收机制分析
Oct 10 Javascript
js获取当前页面路径示例讲解
Jan 08 Javascript
JS方法调用括号的问题探讨
Jan 24 Javascript
jQuery实现复选框全选/取消全选/反选及获得选择的值
Jun 12 Javascript
js判断手机和pc端选择不同执行事件的方法
Jan 30 Javascript
JQuery实现可直接编辑的表格
Apr 16 Javascript
jquery实现鼠标经过显示下划线的渐变下拉菜单效果代码
Aug 24 Javascript
JQuery.validationEngine表单验证插件(推荐)
Dec 10 Javascript
vue-router权限控制(简单方式)
Oct 29 Javascript
详解如何在Node.js的httpServer中接收前端发送的arraybuffer数据
Nov 11 Javascript
node中短信api实现验证码登录的示例代码
Jan 20 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中利用wsdl创建标准webservice的实现代码
2011/12/07 PHP
php daddslashes()和 saddslashes()有哪些区别分析
2012/10/26 PHP
PHP_NETWORK_GETADDRESSES: GETADDRINFO FAILED问题解决办法
2014/05/04 PHP
php数据序列化测试实例详解
2017/08/12 PHP
js 编写规范
2010/03/03 Javascript
jQuery怎么解析Json字符串(Json格式/Json对象)
2013/08/09 Javascript
JS教程:window.location使用方法的区别介绍
2013/10/04 Javascript
js jquery ajax的几种用法总结(及优缺点介绍)
2014/01/28 Javascript
再探JavaScript作用域
2014/09/24 Javascript
javascript文本框内输入文字倒计数的方法
2015/02/24 Javascript
js根据鼠标移动速度背景图片自动旋转的方法
2015/02/28 Javascript
原生JS实现图片网格式渐显、渐隐效果
2017/06/05 Javascript
详解Vue打包优化之code spliting
2018/04/09 Javascript
vue.js编译时给生成的文件增加版本号
2018/09/17 Javascript
微信小程序使用wxParse解析html的方法示例
2019/01/17 Javascript
js实现简单掷骰子效果
2019/10/24 Javascript
Vue替代marquee标签超出宽度文字横向滚动效果
2019/12/09 Javascript
javascript利用键盘控制小方块的移动
2020/04/20 Javascript
在vue中使用cookie记住用户上次选择的实例(本次例子中为下拉框)
2020/09/11 Javascript
JavaScript读取本地文件常用方法流程解析
2020/10/12 Javascript
Python利用BeautifulSoup解析Html的方法示例
2017/07/30 Python
Python管理Windows服务小脚本
2018/03/12 Python
python3读取excel文件只提取某些行某些列的值方法
2018/07/10 Python
Golang GBK转UTF-8的例子
2019/08/26 Python
python 使用while写猜年龄小游戏过程解析
2019/10/07 Python
Python安装并操作redis实现流程详解
2020/10/13 Python
在线购买澳大利亚设计师手拿包和奢华晚装手袋:Olga Berg
2019/03/20 全球购物
CK巴西官方网站:Calvin Klein巴西
2019/07/19 全球购物
英国婴儿产品专家:Samuel Johnston
2020/04/20 全球购物
四川internet信息高速公路(C#)笔试题
2012/02/29 面试题
公司财务流程之主管工作流程
2014/03/03 职场文书
财务管理专业自荐书
2014/09/02 职场文书
学校艾滋病宣传活动总结
2015/05/09 职场文书
运动会闭幕式主持词
2015/07/01 职场文书
Nginx配置并兼容HTTP实现代码解析
2021/03/31 Servers
mongodb数据库迁移变更的解决方案
2021/09/04 MongoDB