新的增加的知识

innerHTML我们都很熟悉,并且在初学js的时候用的很多,也很方便,比一个个创建dom元素,再利用appendChild拼接方便多了,但是当我们要处理的量比较大时,innerHTML就GG了,看过网上别人分享的一些改进方法,在这里也整理一下分享给大家。

第一种解决方案:

使用insertAdjacentHTML()方法,

这个方法接收两个参数,一个是where,一个是text,

where是指插入的位置,有四个可选值,分别为:

  1. beforeBegin: 插入到标签开始前
  2. afterBegin:插入到标签开始标记之后
  3. beforeEnd:插入到标签结束标记前
  4. afterEnd:插入到标签结束标记后

text即为html文本,例如“<li></li>”;

关于四个位置参数的解析请看代码:

先看一下html结构是这样的:

<ul id="list">
      <li>one</li>
</ul>

1、beforeBegin: 插入到标签开始前:

var list=document.getElementById("list");
list.insertAdjacentHTML("beforeBegin","<li>two</li>");

在浏览器中的查看代码是这样的:

<li>two</li>
<ul>
  <li>one</li>
</ul>

2、afterBegin:插入到标签开始标记之后

var list=document.getElementById("list");
list.insertAdjacentHTML("afterBegin","<li>two</li>");

在浏览器中是这样的:

<ul id="list">
      <li>two</li>
      <li>one</li>
</ul>

3、beforeEnd:插入到标签结束标记前

var list=document.getElementById("list");
list.insertAdjacentHTML("beforeEnd","<li>two</li>");

在浏览器中是这样的:

<ul id="list">
       <li>one</li>
       <li>two</li>
</ul>

4、afterEnd:插入到标签结束标记后

var list=document.getElementById("list");
list.insertAdjacentHTML("afterEnd","<li>two</li>");

在浏览器:

<ul id="list">
      <li>one</li>
</ul>
<li>two</li>

关于第二个参数,可以是一个字符串参数,像这样:

var html="<li>two</li>";
list.insertAdjacentHTML("afterEnd",html);

各大浏览器的新版本都已经支持这个方法。具体的版本支持情况可以自行百度。

再来一个自制的方法:appendHTML();

如果你了解appendChild方法,应该能猜到,appendHTML方法就是在一个元素之后追加一段html代码,具体实现方法如下:

方法思想:

  1. 首先创建一个容器,这里是div;
  2. 然后将要追加的html代码添加到这个容器中;
  3. 取出这个容器中的所有节点,遍历每一个节点;
  4. 创建一个文档片段,fragment=document.createDocumentFragment();
  5. 将节点复制到文档片段中,这里使用cloneNode函数执行深复制;
  6. 最后将文档片段追加到元素中。

function appendHTML(ele,html,site){

var div=document.createElement("div"),
nodes=null,
fragment=document.createDocumentFragment();
div.innerHTML=html;
nodes=div.childNodes;
for(var i=0,len=nodes.length;i<len;i++){
fragment.appendChild(nodes[i].cloneNode(true));
}
site=site||"before";
site !== "before"? ele.appendChild(fragment) : ele.insertBefore(fragment, ele.firstChild);
// 回收内存
nodes=null;
fragment=null;
}

可以这样使用:

appendHTML(list,html,"after");
appendHTML(list,html,"before");

分别产生的效果是:(还是利用上面的html代码结构)

//after
<ul id="list">
      <li>one</li>
       <li>two</li>
</ul>
//before
<ul id="list">
      <li>two</li>
       <li>one</li>
</ul>

参考资料:

http://www.zhangxinxu.com/

时间: 2024-07-30 10:15:45

新的增加的知识的相关文章

第十四章 LINUX新安全FIREWALLD-CENTOS7.5知识

一.FIRWALLDFilewalld(动态防火墙)作为redhat7系统中变更对于netfilter内核模块的管理工具:iptables service 管理防火墙规则的模式(静态):用户将新的防火墙规则添加进 /etc/sysconfig/iptables 配置文件当中,再执行命令 /etc/init.d/iptables reload 使变更的规则生效.在这整个过程的背后,iptables service 首先对旧的防火墙规则进行了清空,然后重新完整地加载所有新的防火墙规则,如果加载了防火

MWeb 1.3.7 发布!增加发布到 Wordpress 等支持 MetaWeblog API 的服务,如:Wordpress 博客、新浪博客、cnblogs、oschina。

MWeb 1.3.7 版的新功能 增加发布到 Wordpress 等支持 Metaweblog API 的服务,目前经测试过的有: Wordpress 博客.新浪博客.cnblogs.oschina. 增加发布到 Tumblr 和 Scriptogr.am 即时预览改进,原来会闪动,现在拿掉了同步滚动功能后不会了. 编辑器和三栏切换也有小改进. 下边介绍一下发布到 Wordpress 等支持 Metaweblog API 的功能 我所知,Mac 下支持这一功能的 Native 的 Markdow

[转]Web3.0时代,企业知识管理新趋势

[转自http://www.amt.com.cn/html/ManageFront/AMTPoint0/2014/0716/1370.html] Web3.0时代,企业知识管理新趋势 2014-07-16 18:54作者 肖启操 [本文导读]知识管理对于企业的价值在哪里?不同的企业在应用知识管理时会重点关注哪些价值?关于Web3.0时代的知识管理发展新趋势,我们从知识管理价值变化开始说起. 近20年,科技浪潮发展的一个基本框架可以被描述为:基于网络互联的Web 1.0时代,基于社交的Web2.0

知识付费也迎来下半场,走向全面电商化?

前不久罗振宇停止了视频更新,随后又把他坚持1600天的事情放弃了,不直接发语音了:日前,罗振宇又召开了得到APP的首场知识发布会,全面向知识付费发起了进攻. 无独有偶,随后知乎高调上线了新的产品入口"知识市场",用户可以在此入口对知乎Live.知乎书店和付费咨询等所有付费产品直接购买,为了确保市场的健康发展,知乎还推出了一系列市场化机制:如七天无理由退款,评价功能再升级,流量补贴策略等等,这无疑宣告了知识付费电商化时代的到来,知乎也正在努力将自身塑造成知识电商时代的"天猫&q

Java基础知识的三十个经典问答

Java基础知识的三十个经典问答 1.面向对象的特点 抽象: 抽象是或略一个主题中与当前目标的无关的因素,一边充分考虑有关的内容.抽象并不能解决目标中所有的问题,只能选择其中的一部分,忽略其他的部分.抽象包含两个方面:一是过程抽象:一是数据抽象. 继承 继承是一种联接类的层次模型,允许和鼓励类的重用,提供了一种明确的共性的方法.对象的一个新类可以从现有的类中派生,这叫做类的继承.心累继承了原始类 的特性,新类称为原始类的派生类或者是子类,原始类称为新类的基类或者父类.子类可以从父类那里继承父类的

“互联网+”是深连接:用AI+新实体经济数据重构产业

"在BAT中,大家一直在强调互联网的点击率.转化率.广告效果等等.但是'互联网+'更性感的地方,在于当'互联网+'的技术沉入到车间里,与机器发生对话时所产生的威力,远远超过互联网.工业互联网一秒钟就是几个TB的数据,这是比移动互联网更大.更深的场景."这是阿里云人工智能科学家闵万里在4月19日阿里云支持"浙江十万企业上云"(<浙江省"企业上云"行动计划(2017)>)活动上所表示的. 两年前的2015年3月15日,政府工作报告中首次提

java基础知识--- 集合类

常用集合类的使用 java中的集合,不管是List,Set,还是Map,都是继承自collection接口,这个接口主要定义了集合类的一些公关方法,比如isEmpty(), remove(),add()等,在使用集合类的时候除了顺序遍历,还提供了一种方便的迭代器遍历的方法,在遍历过程中需要remove元素的必须试用迭代器遍历(在删除元素时,集合内部的index会发生变化,使用顺序遍历可能会产生unindex的情况). 为了实现迭代遍历,定义了Iterable接口,collection接口继承了I

学习Python总是学了新内容又忘了旧的咋办?

学习Python总是学了新内容又忘了旧的咋办? 比如爬虫的几个解析库,学了pyquery后感觉beautifulsoup又有点忘了,只能大概记得有哪些功能,xpath感觉基本忘光了,最近看了一些selenium的说明文档,感觉也是脑袋里乱乱的,用起来还要到网上查. 1.不仅仅是学习Python,任何一门知识都是,记忆差是学习的大敌. 很多初学者在接触新知识的时候都会给自己很大的压力,这种“习惯性压力思维”从人很小的时候就已经存在了,学习识字的时候,家长们往往最头疼的就是孩子今天学十个字,明早睡醒

Google Analytics (GA) 推出新助理功能

虽然Google被墙了,但还是好多公司正在使用Google的服务.比如,很多公司用Google Analytics(简称GA)来收集分析用户行为数据,以指导企业运营方向和产品路线.用过GA的人都深感GA的强大,但如果对数字没有sense,不具备数据分析经验的人,看GA的图表就只能和看股市走势图一样,不知其背后到底发生了什么事情,未来还会发生什么变化.现在好了,Google前些天在Google Analytics App里推出了一个助理功能,让你能快速洞悉数字背后的故事.比如,某电商在上周里突然订