原生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的一行代码轻松实现拖动效果
Dec 28 Javascript
JS特权方法定义作用以及与公有方法的区别
Mar 18 Javascript
js判断ie版本号的简单实现代码
Mar 05 Javascript
Jquery焦点图实例代码
Nov 25 Javascript
javascript如何实现360度全景照片问题汇总
Apr 04 Javascript
jQuery层级选择器实例代码
Feb 06 Javascript
js replace()去除代码中空格的实例
Feb 14 Javascript
微信小程序使用video组件播放视频功能示例【附源码下载】
Dec 08 Javascript
关于React动态加载路由处理的相关问题
Jan 07 Javascript
JS对象和字符串之间互换操作实例分析
Feb 02 Javascript
JavaScript高阶教程之“==”隐藏下的类型转换
Apr 11 Javascript
javascript实现导航栏分页效果
Jun 27 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编写大型网站问题集
2007/03/06 PHP
纯PHP代码实现支付宝批量付款
2015/12/24 PHP
Yii数据库缓存实例分析
2016/03/29 PHP
理解 JavaScript 预解析
2009/10/25 Javascript
基于jquery的checkbox下拉框插件代码
2010/06/25 Javascript
jQuery动态设置form表单的enctype值(实现代码)
2013/07/04 Javascript
js菜单点击显示或隐藏效果的简单实例
2014/01/13 Javascript
jQuery实现视频作为全屏幕背景
2014/12/18 Javascript
纯javascript代码实现计算器功能(三种方法)
2015/09/07 Javascript
js获取隐藏元素宽高的实现方法
2016/05/19 Javascript
Bootstrap基本组件学习笔记之分页(12)
2016/12/08 Javascript
性能优化之代码优化页面加载速度
2017/03/01 Javascript
利用JavaScript的%做隔行换色的实例
2017/11/25 Javascript
微信小程序progress组件使用详解
2018/01/31 Javascript
js如何找出字符串中的最长回文串
2018/06/04 Javascript
原生javascript单例模式的应用实例分析
2020/02/23 Javascript
微信小程序中的列表切换功能实例代码详解
2020/06/09 Javascript
跟老齐学Python之赋值,简单也不简单
2014/09/24 Python
python自定义解析简单xml格式文件的方法
2015/05/11 Python
Python中在for循环中嵌套使用if和else语句的技巧
2016/06/20 Python
python selenium自动上传有赞单号的操作方法
2018/07/05 Python
django.db.utils.ProgrammingError: (1146, u“Table‘’ doesn’t exist”)问题的解决
2018/07/13 Python
利用python画出折线图
2018/07/26 Python
Python将8位的图片转为24位的图片实现方法
2018/10/24 Python
python获取时间及时间格式转换问题实例代码详解
2018/12/06 Python
Python中字符串与编码示例代码
2019/05/20 Python
wxpython绘制音频效果
2019/11/18 Python
从零开始的TensorFlow+VScode开发环境搭建的步骤(图文)
2020/08/31 Python
使用CSS3来绘制一个月食图案
2015/07/18 HTML / CSS
谈一谈HTML5本地存储技术
2016/03/02 HTML / CSS
H5 canvas实现贪吃蛇小游戏
2017/07/28 HTML / CSS
英国户外玩具儿童游乐设备网站:TP Toys(蹦床、攀爬框架、秋千、滑梯和游戏屋)
2018/04/09 全球购物
民政局副局长民主生活会个人整改措施
2014/10/04 职场文书
追悼会答谢词
2015/01/05 职场文书
英文升职感谢信
2015/01/23 职场文书
Vue3如何理解ref toRef和toRefs的区别
2022/02/18 Vue.js