原生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 相关文章推荐
JavaScript中for..in循环陷阱介绍
Nov 12 Javascript
简单谈谈javascript代码复用模式
Jan 28 Javascript
javascript获取select值的方法分析
Jul 02 Javascript
jQuery子元素过滤选择器用法示例
Sep 09 Javascript
jQuery可见性过滤选择器用法示例
Sep 09 Javascript
AngularJS 中使用Swiper制作滚动图不能滑动的解决方法
Nov 15 Javascript
浅谈Angular文字折叠展开组件的原理分析
Nov 24 Javascript
JS实现移动端触屏拖拽功能
Jul 31 Javascript
微信小程序实现的一键复制功能示例
Apr 24 Javascript
微信小程序实现搜索指定景点周边美食、酒店
May 18 Javascript
Angular8路由守卫原理和使用方法
Aug 29 Javascript
微信小程序手动添加收货地址省市区联动
May 18 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
set_include_path在win和linux下的区别
2008/01/10 PHP
PHP中simplexml_load_string函数使用说明
2011/01/01 PHP
php urlencode()与urldecode()函数字符编码原理详解
2011/12/06 PHP
CodeIgniter生成网站sitemap地图的方法
2013/11/13 PHP
使用php批量删除数据库下所有前缀为prefix_的表
2014/06/09 PHP
php使用变量动态创建类的对象用法示例
2017/02/06 PHP
PHP多进程简单实例小结
2019/11/09 PHP
javascript脚本编程解决考试分数统计问题
2008/10/18 Javascript
通用JS事件写法实现代码
2009/01/07 Javascript
web页面数据展示新想法(json)
2010/06/08 Javascript
js中if语句的几种优化代码写法
2011/03/12 Javascript
jquery插件validate验证的小例子
2013/05/08 Javascript
几种设置表单元素中文本输入框不可编辑的方法总结
2013/11/25 Javascript
PHP中CURL的几个经典应用实例
2015/01/23 Javascript
JavaScript自学笔记(必看篇)
2016/06/23 Javascript
js以分隔符分隔数组中的元素并转换为字符串的方法
2016/11/16 Javascript
js实现文字向上轮播功能
2017/01/13 Javascript
使用pkg打包Node.js应用的方法步骤
2018/10/19 Javascript
jquery层次选择器的介绍
2019/01/18 jQuery
Vue中跨域及打包部署到nginx跨域设置方法
2019/08/26 Javascript
vue.js实现只能输入数字的输入框
2019/10/19 Javascript
Vue通过provide inject实现组件通信
2020/09/03 Javascript
[01:00:53]2018DOTA2亚洲邀请赛3月29日 小组赛B组 iG VS Secret
2018/03/30 DOTA
零基础写python爬虫之爬虫的定义及URL构成
2014/11/04 Python
python通过exifread模块获得图片exif信息的方法
2015/03/16 Python
在Django中管理Users和Permissions以及Groups的方法
2015/07/23 Python
对numpy的array和python中自带的list之间相互转化详解
2018/04/13 Python
解决新版Pycharm中Matplotlib图像不在弹出独立的显示窗口问题
2019/01/15 Python
python 一篇文章搞懂装饰器所有用法(建议收藏)
2019/08/23 Python
CSS3只让背景图片旋转180度的实现示例
2021/03/09 HTML / CSS
龟牌英国商店:Turtle Wax Brand Store UK
2019/07/02 全球购物
如何利用find命令查找文件
2015/02/07 面试题
运动会解说词100字
2014/01/31 职场文书
县级文明单位申报材料
2014/05/23 职场文书
入党自荐书范文
2015/03/05 职场文书
SQLServer之常用函数总结详解
2021/08/30 SQL Server