原生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 blockUI 遮罩不能消失与不能提交的解决方法
Sep 17 Javascript
解决火狐浏览器下JS setTimeout函数不兼容失效不执行的方法
Nov 14 Javascript
个人总结的一些JavaScript技巧、实用函数、简洁方法、编程细节
Jun 10 Javascript
AngularJS仿苹果滑屏删除控件
Jan 18 Javascript
JavaScript 函数的执行过程
May 09 Javascript
14 个折磨人的 JavaScript 面试题
Aug 08 Javascript
Bootstrap 3 进度条的实现
Feb 22 Javascript
Angular 4依赖注入学习教程之Injectable装饰器(六)
Jun 04 Javascript
VUE2实现事件驱动弹窗示例
Oct 21 Javascript
vue2.0页面前进刷新回退不刷新的实现方法
Jul 31 Javascript
微信小程序使用websocket通讯的demo,含前后端代码,亲测可用
May 22 Javascript
利用H5api实现时钟的绘制(javascript)
Sep 13 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学习之整理字符串
2011/04/17 PHP
PHP中的session永不过期的解决思路及实现方法分享
2011/04/20 PHP
php实现下载限制速度示例分享
2014/02/13 PHP
php编写的抽奖程序中奖概率算法
2015/05/14 PHP
图片按比例缩放函数
2006/06/26 Javascript
JS 实现点击a标签的时候让其背景更换
2013/10/15 Javascript
jquery获得option的值和对option进行操作
2013/12/13 Javascript
jquery教程限制文本框只能输入数字和小数点示例分享
2014/01/13 Javascript
原生Ajax 和jQuery Ajax的区别示例分析
2014/12/17 Javascript
javascript将DOM节点添加到文档的方法实例分析
2015/08/04 Javascript
jQuery+CSS实现的网页二级下滑菜单效果
2015/08/25 Javascript
JQuery Mobile实现导航栏和页脚
2016/03/09 Javascript
分享一个插件实现水珠自动下落效果
2016/06/01 Javascript
JS实现数字格式千分位相互转换方法
2016/08/01 Javascript
css和js实现弹出登录居中界面完整代码
2017/11/26 Javascript
AngularJS日期格式化常见操作实例分析
2018/05/17 Javascript
vue实现微信分享链接添加动态参数的方法
2019/04/29 Javascript
JS计算斐波拉切代码实例
2019/09/12 Javascript
js实现石头剪刀布游戏
2020/10/11 Javascript
[02:04]2014DOTA2国际邀请赛 DK一个时代的落幕
2014/07/21 DOTA
python中二维阵列的变换实例
2014/10/09 Python
Python验证企业工商注册码
2015/10/25 Python
Python自动化开发学习之三级菜单制作
2017/07/14 Python
利用python如何处理nc数据详解
2018/05/23 Python
浅谈django orm 优化
2018/08/18 Python
Python调用百度根据经纬度查询地址的示例代码
2019/07/07 Python
利用python-pypcap抓取带VLAN标签的数据包方法
2019/07/23 Python
python3中替换python2中cmp函数的实现
2019/08/20 Python
Python Opencv中用compareHist函数进行直方图比较对比图片
2020/04/07 Python
九州传奇上机题
2014/07/10 面试题
幼儿园园长岗位职责
2013/11/26 职场文书
小学毕业寄语大全
2014/04/03 职场文书
运动员获奖感言
2014/08/15 职场文书
公司财务管理制度
2015/08/04 职场文书
Python制作表白爱心合集
2022/01/22 Python