js:插入节点appendChild insertBefore使用方法

首先 从定义来理解 这两个方法: 
appendChild() 方法:可向节点的子节点列表末尾添加新的子节点。语法:appendChild(newchild) 
insertBefore() 方法:可在已有的子节点前插入一个新的子节点。语法 :insertBefore(newchild,refchild) 
相同之处:插入子节点 
不同之处:实现原理方法不同。 
     appendChild 方法是在父级节点中子节点的末尾添加新的节点(相对于父级节点来说)。 
     insertBefore  方法是在已有的节点前添加新的节点(相对于子节点来说的)。

来看个这个简单的实例:在id为box-one 的末尾添加一个子节点div

1 <div class="btns">  <input type="button" value="插入元素" id="creatbtn"/></div>
2 <div id="box-one">
3   <p class="con2" id="p1">1</p>
4   <p class="con2" >2</p>
5   <p class="con2" >3</p>
6 </div> 
 1 window.onload = function () {
 2   var btn = document.getElementById("creatbtn");
 3   btn.onclick = function() {
 4     insertEle();
 5   }
 6 }
 7 function insertEle() {
 8   var oTest = document.getElementById("box-one");
 9   var newNode = document.createElement("div"); // createElement 是在对象中创建一个对象
10   newNode.innerHTML = " This is a newcon ";
11   //oTest.appendChild(newNode);
12   oTeset.insertBefore(newNode,null); // 这两种方法均可实现 或者oTeset.insertBefore(newNode,oTeset.childNodes[0])    
13 } 

这个insertBefore 的第一个参数 和appendChild的一样,都是那个新的节点变量,而insert第二个参数不仅可以为null 。也可以这样写:

1 function insertEle() {
2   var oTest = document.getElementById("box-one");
3   var newNode = document.createElement("div");
4   var reforeNode = document.getElementById("p1");
5   newNode.innerHTML = " This is a newcon ";
6   oTest.insertBefore(newNode,reforeNode); // 新建的元素节点插入到 id为p1的元素前面 //或者oTest.insertBefore(newNode,reforeNode.nextSibling);//新建的元素节点插入到 id为p1后面节点元素的前面,也就是说 插入id为P1节点元素的后面。 7} 

nextSibling :某个元素之后紧跟的元素(处于同一树层级中)。

reforeNode.nextSibling :取得的是reforeNode对象的紧跟着的下一个节点。 
previousSibling - 取得某节点的上一个同级节点。

//appendChild无法设置想要插入的明确位置
//oTest.appendChild(oP2);

//insertBefore则可以设置
//oTest.insertBefore(oP2,null);
//oTest.insertBefore(oP2,oP1);
//oTest.insertBefore(oP2,oP1.nextSibling);
//oTest.insertBefore(oP2,oP3.previousSibling);
//oTest.insertBefore(oP2,oTest.childNodes[0]);

好了那么有insertBefore的应该也有insertAfter吧? 
好那我们来用Aptana编写一个例子吧,但Aptana的智能提示告诉我其实没有insertAfter这个方法 
那么就自己定义一个罗
insertAfter定义

1 function insertAfter(newEl, targetEl) {
2     var parentEl = targetEl.parentNode;
3     if(parentEl.lastChild == targetEl) {
4         parentEl.appendChild(newEl);
5     }else {
6         parentEl.insertBefore(newEl,targetEl.nextSibling);
7     }
8 }     

总结: 
1、appendChild和insertBefore是做对节点的方法来使用的,而insertAfter只是自定义的一个函数 
2、insertBefore相对于appendChild来说,比较灵活可以将新的节点插入到目标节点子节点数组中的任一位置。 
3、使用appendChild和insertBefore来插入新的节点前提是,其兄弟节点必须有共同的父节点

如果只从DOM操作的性能上分析,appendChild和insertBefore这两个方法本身是没有太大差异的。但是insertBefore本身具有appendChild无法比拟的功能,它对插入元素的位置是可以选择的。因此它对页面可能造成的影响也更大,渲染的开销也可能更大。

最后顺便说一下,在IE6上,文档加载完毕之前使用appendChild会出错,而使用insertBefore就不会出错。

时间: 2024-10-05 13:38:00

js:插入节点appendChild insertBefore使用方法的相关文章

js插入节点appendChild和insertBefore

首先 从定义来理解 这两个方法: appendChild() 方法:可向节点的子节点列表的末尾添加新的子节点.语法:appendChild(newchild) insertBefore() 方法:可在已有的子节点前插入一个新的子节点.语法 :insertBefore(newchild,refchild) 相同之处:插入子节点 不同之处:实现原理方法不同. appendChild方法是在父级节点中的子节点的末尾添加新的节点(相对于父级节点 来说).   insertBefore 方法 是在已有的节

插入节点appendChild()

http://www.imooc.com/code/1698 插入节点appendChild() 在指定节点的最后一个子节点列表之后添加一个新的子节点. 语法: appendChild(newnode) 参数: newnode:指定追加的节点. 我们来看看,div标签内创建一个新的 P 标签,代码如下: 运行结果: HTML JavaScript This is a new p

【笔记】js parentsNode,lastChild,appendChild,insertBefore,nextSibling的意义及运用

这几天看书看到这几个属性做几个笔记 parentNode:顾名思义,就是获取某元素的父元素等同于jq的parent(). lastChild:获取最后一个子元素. appendChild:在某元素内最后面添加一个子元素. insertBefore:在某元素外的 前面添加一个元素. 此函数有两个参数insertBefore(newelem,targetelem),newelem是要插入的元素,targetelem是与newelem相对的 元素,调用此方法必须用 targetelem的父元素调用 即

js获取节点和编辑的方法

获取: 1.document.getElementById() 靠id获取节点 2.document.getElementsByClassName() 靠类名获取节点集(数组) 3.document.getElementsByTagName() 靠标签名获取节点集(数组) 4.document.createElement() 创建新的节点 5.document.querySelector() 靠CSS选择符获取节点 6.document.querySelectorAll() 靠CSS选择符获取节

js获取节点的DOM操作

一直感觉DOM节点什么的乱七八糟的不能理解,可能博客也没办法写清楚,只能把知道的一些信息大致写下来慢慢再补充了. HTML DOM类型 Node类型 Javascript中的所有节点类型都继承自Node类型,因此所有节点类型都共享着相同的基本属性和方法. 除IE外其他浏览器都可以访问到这个类型. 每个节点都有一个NodeType属性,用于表明节点的类型,节点类型由在Node类型中定义的下列12个常数值来表示,任何节点类型必居其一. 根据这些常量值可以很容易的判断节点类型. if(someNode

JavaScript之DOM-5 增加、删除和替换节点(创建节点、插入节点、删除和替换节点)

一.创建节点 创建元素 - 使用如下方法可以创建一个新的元素节点: - document.createElement('元素名'); 创建文本节点 - 使用如下方法可以创建一个新的元素节点: - document.createTextNode('text'); 创建注释 - 使用如下方法可以创建一个HTML注释节点: - document.createComment('comment'); 创建文档片段 - 使用如下方法可以创建一个文档片段: - document.createDocumentF

JS添加节点方法与JQuery添加节点方法的比较及总结

原生JS添加节点方法与JQuery添加节点方法的比较及总结 一.首先构建一个简单布局,来供下边讲解使用 1.HTML部分代码: <div id="div1">div1</div> <div id="div2">div2 <span id="span1">span1</span> <span id="span2">span2</span> <

原生JS添加节点方法与JQuery添加节点方法的比较及总结

一.首先构建一个简单布局,来供下边讲解使用 1.HTML部分代码: <div id="div1">div1</div> <div id="div2">div2 <span id="span1">span1</span> <span id="span2">span2</span> </div> <div id="div

节点插入--对比jQuery和JavaScript方法(一)

二.插入元素: 1 <div> 2 <p>面朝大海,春暖花开</p> 3 </div> (一).jQuery方法 1.在节点内部插入: 方法 说明 append() 向每个匹配的元素内部追加内容 appendTo() 把所有的元素追加到另一个指定的元素集合中,实际上是颠倒了append()的用法.如$(A).append(B)与$(B).appendto(A)是等价的 prepend() 向每个匹配的元素内部前置内容 prependTo() 把所有匹配的元素