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就不会出错。

转载于:https://www.cnblogs.com/zhangym118/p/5872299.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/542579.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pandas concat_pandas-数据合并-concat(最全参数解释,含代码和实例)

pandas中的concat的功能&#xff1a;假设你现在需要将多个数据合并&#xff0c;前提是&#xff1a;这几个文件列名都一致&#xff0c;也就是说这几个文件格式完全一样&#xff0c;只是数据不太一样&#xff0c;类似于合并多个文件这种&#xff0c;实际数据分析中也会遇到这种情…

java中的de是什么_【转】java中main函数解析

源地址&#xff1a;http://www.cnblogs.com/xwdreamer/archive/2012/04/09/2438845.html从写java至今&#xff0c;写的最多的可能就是主函数public static void main(String[] args) {}但是以前一直都没有问自己&#xff0c;为什么要这么写&#xff0c;因为在c语言中就没有这样…

JAVA多线程(一)线程安全问题产生的原因

JAVA线程内存与主存间映射示意图Java内存模型中规定了所有的变量都存储在主内存中&#xff0c;每条线程还有自己的工作内存&#xff0c;线程的工作内存中保存了该线程使用的变量到主内存副本拷贝&#xff0c;线程对变量的所有操作&#xff08;读取、赋值&#xff09;都必须在工…

两顶点的路径长度为k_计算两个顶点之间的所有可能路径

两顶点的路径长度为kWhat to Learn? 学什么&#xff1f; How to count all possible paths between two vertices? 如何计算两个顶点之间的所有可能路径&#xff1f; In the graph there are many alternative paths from vertex 0 to vertex 4 在图中&#xff0c;有许多从…

php debug_print_backtrace,php中debug_backtrace、debug_print_backtrace和匿名函数用法实例

本文实例讲述了php中debug_backtrace、debug_print_backtrace和匿名函数用法。分享给大家供大家参考。具体分析如下&#xff1a;debug_print_backtrace() 是一个很低调的函数,很少有人注意过它.不过当我们对着一个对象调用另一个对象再调用其它的对象和文件中的一个函数出错时,…

covariance matrix r语言_时间序列分析|ARIMAX模型分步骤详解和R中实践

这是关于时间序列的第N篇文章&#xff0c;本文将介绍ARIMAX模型&#xff0c;简单来说就是在ARIMA的基础上增加一个外生变量。ARIMAX和ARIMA相比在理论上没有太多新的内容&#xff0c;所以本文直接介绍在R里怎么一步一步跑ARIMAX。在阅读这篇文章前&#xff0c;需要对ARIMA有一定…

linux系统编程之文件与I/O(六):fcntl 函数与文件锁

2013-05-14 11:26 8290人阅读 评论(2) 收藏 举报分类&#xff1a;linux系统编程&#xff08;19&#xff09; 版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 一、fcntl函数 功能&#xff1a;操纵文件描述符&#xff0c;改变已打开的文件的属性 int…

python 使用异常函数_您如何测试Python函数引发异常?

python 使用异常函数This article elaborates on how to implement a test case for a function that raises an exception. 本文详细介绍了如何为引发异常的函数实现测试用例 。 Consider the following function: 考虑以下功能&#xff1a; import redef check_email_forma…

php 远程图片合拼,PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】...

本文实例讲述了PHP实现将几张照片拼接到一起的合成图片功能。共享给大家供大家参考&#xff0c;详细如下&#xff1a;/*** 作品合成程序* 针对单面&#xff0c;封面不做特殊处理*/$src_path $argv[1]; // php该文件&#xff0c;第一个参数是文件夹名(作品集)&#xff0c;可相对…

bandizip最后一个无广告版本_如果非要选择一款压缩软件的话——Bandizip

全世界只有不到0.00~1 % 的人关注了我们得到你的关注是小帮的幸运压缩解压软件是电脑一个必备软甲&#xff0c;前面的文章介绍了一款开源小巧无广告的压缩解压软件windows工具软件选择之压缩软件——7-Zip&#xff0c;如果有人用不惯的话可以试试今天的这款。Bandizip 是一款来…

[MVC学习笔记]1.项目结构搭建及单个类在各个层次中的实现

新人刚开始学习ASP.NET MVC&#xff0c;若有不足之处希望能得到您的指点&#xff0c;不胜感激&#xff01; 先来一张项目的层级结构图: Model&#xff1a;模型层&#xff0c;主要是各种类型、枚举以及ORM框架&#xff0c;框架完成数据库和实体类的映射。项目中选用了微软的开源…

日期getUTCSeconds()方法以及JavaScript中的示例

JavaScript日期getUTCSeconds()方法 (JavaScript Date getUTCSeconds() method) getUTCSeconds() method is a Dates class method and it is used to get seconds from the current time according to the UTC (Universal time coordinated). getUTCSeconds()方法是Date的类方…

dedecms 在模板里引入php文件夹,dedecms如何添加并引入php文件

前言&#xff1a;有些时候我们需要创建一些单独的PHP文件&#xff0c;但是随便放入的PHP文件是不能够编译织梦 dedecms的标签的&#xff0c;所以我们需要引入织梦标签的编译引擎方案。例如&#xff0c;我们在根目录创建 example.php&#xff0c;代码如下&#xff1a;<?php …

mybatisplus代码生成器_想做时间管理大师?你可以试试Mybatis Plus代码生成器

1. 前言对于写Crud的老司机来说时间非常宝贵&#xff0c;一些样板代码写不但费时费力&#xff0c;而且枯燥无味。经常有小伙伴问我&#xff0c;胖哥你怎么天天那么有时间去搞新东西&#xff0c;透露一下秘诀呗。好吧&#xff0c;今天就把Mybatis-plus的代码生成器分享出来&…

安装Oracle 11g RAC R2 之Linux DNS 配置

Oracle 11g RAC 集群中引入了SCAN(Single Client Access Name)的概念&#xff0c;也就是指集群的单客户端访问名称。SCAN 这个特性为客户端提供了单一的主机名&#xff0c;用于访问集群中运行的 Oracle 数据库。如果您在集群中添加或删除节点&#xff0c;使用 SCAN 的客户端无需…

c++ websocket客户端_websocket使用

websocket使用一、介绍在项目开发过程中&#xff0c;很多时候&#xff0c;我们不可避免的需要实现的一个功能&#xff1a; 服务端实时发送信息给客户端。比如实时公告、实时订单通知、实时报警推送等等&#xff0c;登录后的客户端需要知道与它相关的实时信息&#xff0c;以便进…

汉子编码比字母编码长_字母/博客作者编码问题(使用动态编程)

汉子编码比字母编码长Problem statement: 问题陈述&#xff1a; Shivang is a blog writer and he is working on two websites simultaneously. He has to write two types of blogs which are: Shivang是一位博客作家&#xff0c;他同时在两个网站上工作。 他必须写两种类型…

php parent报错,mac brew 安装php扩展报错:parent directory is world writable but not sticky

$ brew install php70-mcrypt报错&#xff1a;Error: parent directory is world writable but not sticky搜索到github的答案https://github.com/Homebrew/legacy-homebrew/issues/40345原因&#xff1a;/tmp目录权限不对$ ls -ld /private/tmp打印出来 /private/tmp 被标黄了…

在cordova中使用HTML5的多文件上传

2019独角兽企业重金招聘Python工程师标准>>> 我们先看看linkface给开放的接口&#xff1a; 字段类型必需描述api_idstring是API 账户api_secretstring是API 密钥selfie_filefile见下方注释需上传的图片文件 1&#xff0c;上传本地图片进行检测时选取此参数selfie_ur…

python dataframe切片_python pandas dataframe 行列选择,切片操作方法

SQL中的select是根据列的名称来选取&#xff1b;Pandas则更为灵活&#xff0c;不但可根据列名称选取&#xff0c;还可以根据列所在的position&#xff08;数字&#xff0c;在第几行第几列&#xff0c;注意pandas行列的position是从0开始&#xff09;选取。相关函数如下&#xf…