原生JS实现列表子元素顺序反转的方法分析


Posted in Javascript onJuly 02, 2018

本文实例讲述了原生JS实现列表子元素顺序反转的方法。分享给大家供大家参考,具体如下:

编写一个函数将一个列表里面的所有子元素顺序反转,问题不难但是解决的方法却有多种,而且性能大不一样,下面就介绍几种常用的方法:

1. 采用直接的DOM操作:

var ul = document.getElementById('target');
var list = ul.getElementByTagName('li');
var length = list.length;
while(length--){
  ul.appendchild(ul.childNodes[length]);
}

这种方法在子元素数量比较少的时候不会太影响页面性能,但是当子元素数量较大的时候,页面的性能会受到很大的影响,因为每一次插入元素都对页面进行直接的DOM操作,因此不太建议这种方法。

2. 采用文档碎片fragment方法

var ul = document.getElementById('target');
var list = ul.getElementByTagName('li');
var fragment = document.createDocumentFragment();
for(var i = list.length; i >= 0; i--){
  fragment.appendChild(list[i]);
}
ul.appendChile(fragment);

采用文档碎片的方法进行操作,整个插入过程只对fragment进行了一次的DOM操作,不管子元素的数量多少,相比第一种方法,页面性能会得到很大的提升,实际应用中可以采用这种方法。

关于fragment的官方说明文档https://developer.mozilla.org/en-US/docs/Web/API/Document/createDocumentFragment。

3. 采用数组的reverse方法

var ul = document.getElementById('target');
var chil_arr = Array.prototype.slice.call(ul.getElementByTagName('li'), 0);//因为getElementByTagName获取到的是伪数组,所以要进行转换
var str = '';
chil_arr.reverse();
for(var i = 0; i < chil_arr.length; i++){
  str += chil_arr[i].outerHTML;
}
ul.innerHTML(str);

这种方法性能也还好。

4. 采用innerHTML方法

var ul = document.getElementById('target');
var list = ul.getElementByTageName('li');
var str = "";
for(var i = list.length; i >= 0; i--){
  str += "<li>" + list[i].innerHTML + "</li>";
}
ul.innerHTML(str);

这种方法性能是最好的,建议在实际应用中采用这种方法,提高页面的性能。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
jQuery库与其他JS库冲突的解决办法
Feb 07 Javascript
Javascript事件实例详解
Nov 06 Javascript
将中国标准时间转换成标准格式的代码
Mar 20 Javascript
jQuery实现返回顶部功能适合不支持js的浏览器
Aug 19 Javascript
JavaScript基本数据类型及值类型和引用类型
Aug 25 Javascript
解析浏览器端的AJAX缓存机制
Jun 21 Javascript
javascript显示系统当前时间代码
Dec 29 Javascript
javascript实现Java中的Map对象功能的实例详解
Aug 21 Javascript
详解如何用webpack4从零开始构建react开发环境
Jan 27 Javascript
JS获取动态添加元素的方法详解
Jul 31 Javascript
webpack proxy 使用(代理的使用)
Jan 10 Javascript
JavaScript写个贪吃蛇小游戏(超详细)
Mar 17 Javascript
JS限制输入框输入的实现代码
Jul 02 #Javascript
webpack手动配置React开发环境的步骤
Jul 02 #Javascript
Angularjs中的$apply及优化使用详解
Jul 02 #Javascript
angularjs 的数据绑定实现原理
Jul 02 #Javascript
vue 解决addRoutes动态添加路由后刷新失效问题
Jul 02 #Javascript
vue中的数据绑定原理的实现
Jul 02 #Javascript
Vue实现双向绑定的原理以及响应式数据的方法
Jul 02 #Javascript
You might like
非常好的php目录导航文件代码
2006/10/09 PHP
php缩放gif和png图透明背景变成黑色的解决方法
2014/10/14 PHP
深入理解JavaScript系列(1) 编写高质量JavaScript代码的基本要点
2012/01/15 Javascript
jQuery实现 注册时选择阅读条款 左右移动
2013/04/11 Javascript
IE6已终止操作问题的2种情况及解决
2014/04/23 Javascript
将form表单中的元素转换成对象的方法适用表单提交
2014/05/02 Javascript
jQuery根据ID获取input、checkbox、radio、select的示例
2014/08/11 Javascript
javascript获取当前鼠标坐标的方法
2015/01/10 Javascript
jQuery获取checkboxlist的value值的方法
2015/09/27 Javascript
整理一些最近经常遇到的前端面试题
2017/04/25 Javascript
使用原生js写ajax实例(推荐)
2017/05/31 Javascript
js+html5实现侧滑页面效果
2017/07/15 Javascript
angular4模块中给标签添加背景图的实现方法
2017/09/15 Javascript
代码详解Vuejs响应式原理
2017/12/20 Javascript
javascript回调函数详解
2018/02/06 Javascript
jQuery实现鼠标移入移出事件切换功能示例
2018/09/06 jQuery
vue使用axios上传文件(FormData)的方法
2019/04/14 Javascript
浅谈目前可以使用ES10的5个新特性
2019/06/25 Javascript
vue v-for出来的列表,点击某个li使得当前被点击的li字体变红操作
2020/07/17 Javascript
[00:53]TI3正赛第三天 DK怒破A队不败金身 现场国旗飘扬热血激昂
2013/08/10 DOTA
python书籍信息爬虫实例
2018/03/19 Python
Python 用三行代码提取PDF表格数据
2019/10/13 Python
斯巴达比赛商店:Spartan Race
2019/01/08 全球购物
美国孕妇装购物网站:Motherhood Maternity
2019/09/22 全球购物
计算机专业推荐信范文
2013/11/20 职场文书
物业工作计划书
2014/01/10 职场文书
证婚人搞笑证婚词
2014/01/10 职场文书
煤矿机修工岗位职责
2014/02/07 职场文书
环境建设实施方案
2014/03/14 职场文书
珍惜资源的建议书
2014/08/26 职场文书
给校长的一封检讨书
2014/09/20 职场文书
2014年班干部工作总结
2014/11/25 职场文书
幼儿园六一儿童节活动总结
2015/02/10 职场文书
2016年党员干部公开承诺书
2016/03/24 职场文书
读后感怎么写?书写读后感的基本技巧!
2019/12/10 职场文书
python神经网络学习 使用Keras进行回归运算
2022/05/04 Python