原生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对象的函数
Dec 22 Javascript
javascript 处理HTML元素必须避免使用的一种方法
Jul 30 Javascript
javascript中字符串的定义示例代码
Dec 19 Javascript
Js+php实现异步拖拽上传文件
Jun 23 Javascript
JS中正则表达式只有3种匹配模式(没有单行模式)详解
Jul 28 Javascript
原生JS下拉加载插件分享
Dec 26 Javascript
jQuery实现链接的title快速出现的方法
Feb 20 Javascript
Bootstrap显示与隐藏简单实现代码
Mar 06 Javascript
Bootstrap标签页(Tab)插件切换echarts不显示问题的解决
Jul 13 Javascript
js如何获取访问IP、地区、当前操作浏览器
Jul 23 Javascript
JS 事件机制完整示例分析
Jan 15 Javascript
js判断在哪个浏览器打开项目的方法
Jan 21 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
SESSION信息保存在哪个文件目录下以及能够用来保存什么类型的数据
2012/06/17 PHP
php在项目中寻找代码的坏味道(综艺命名)
2012/07/19 PHP
PHP图片上传代码
2013/11/04 PHP
PHP使用反射机制实现查找类和方法的所在位置
2016/04/22 PHP
php while循环控制的简单实例
2016/05/30 PHP
js电信网通双线自动选择技巧
2008/11/18 Javascript
使用js解决由border属性引起的div宽度问题
2013/11/26 Javascript
js操作模态窗口及父子窗口间相互传值示例
2014/06/09 Javascript
Javascript基础教程之while语句
2015/01/18 Javascript
nodejs创建web服务器之hello world程序
2015/08/20 NodeJs
详解js私有作用域中创建特权方法
2016/01/25 Javascript
jQuery 获取select选中值及清除选中状态
2016/12/13 Javascript
JavaScript实现图片切换效果
2017/08/12 Javascript
CryptoJS中AES实现前后端通用加解密技术
2018/12/18 Javascript
ES6基础之 Promise 对象用法实例详解
2019/08/22 Javascript
jQuery 选择器用法实例分析【prev + next】
2020/05/22 jQuery
[01:00:53]2018DOTA2亚洲邀请赛3月29日 小组赛B组 iG VS Secret
2018/03/30 DOTA
[47:12]TFT vs Secret Supermajor小组赛C组 BO3 第三场 6.3
2018/06/04 DOTA
Python中比较特别的除法运算和幂运算介绍
2015/04/05 Python
django admin后台添加导出excel功能示例代码
2019/05/15 Python
Python动态声明变量赋值代码实例
2019/12/30 Python
使用Keras训练好的.h5模型来测试一个实例
2020/07/06 Python
python闭包与引用以及需要注意的陷阱
2020/09/18 Python
墨西哥网上超市:Superama
2018/07/10 全球购物
如何设置Java的运行环境
2013/04/05 面试题
集团公司人力资源部岗位职责
2014/01/03 职场文书
秋季红领巾广播稿
2014/01/27 职场文书
市场营销管理毕业生自荐信
2014/03/03 职场文书
2015年度党员自我评价范文
2015/03/03 职场文书
法人代表资格证明书
2015/06/18 职场文书
2015年计算机教学工作总结
2015/07/22 职场文书
2015年酒店销售部工作总结
2015/07/24 职场文书
浅谈JS的二进制家族
2021/05/09 Javascript
python图像处理基本操作总结(PIL库、Matplotlib及Numpy)
2021/06/08 Python
使用logback实现按自己的需求打印日志到自定义的文件里
2021/08/30 Java/Android
HTML页面中使两个div并排显示的实现
2022/05/15 HTML / CSS