原生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 相关文章推荐
最短的IE判断代码
Mar 13 Javascript
JS操作数据库的实例代码
Oct 17 Javascript
JavaScript函数定义的常见注意事项小结
Sep 16 Javascript
JavaScript生成随机数的4种自定义函数分享
Feb 28 Javascript
基于Bootstrap实现下拉菜单项和表单导航条(两个菜单项,一个下拉菜单和登录表单导航条)
Jul 22 Javascript
Vuex之理解Getters的用法实例
Apr 19 Javascript
vue中格式化时间过滤器代码实例
Apr 17 Javascript
不刷新网页就能链接新的js文件方法总结
Mar 01 Javascript
js实现批量删除功能
Aug 27 Javascript
vuex页面刷新导致数据丢失的解决方案
Dec 10 Vue.js
原生js实现自定义滚动条
Jan 20 Javascript
Vue看了就会的8个小技巧
Jan 21 Vue.js
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
967 个函式
2006/10/09 PHP
Yii2框架数据库简单的增删改查语法小结
2016/08/31 PHP
PHP simplexml_load_string()函数实例讲解
2019/02/03 PHP
laravel实现登录时监听事件,添加登录用户的记录方法
2019/09/30 PHP
JavaScript取得鼠标绝对位置程序代码介绍
2012/09/16 Javascript
一张表格告诉你windows.onload()与$(document).ready()的区别
2014/05/16 Javascript
jQuery模仿单选按钮选中效果
2016/06/24 Javascript
KnockoutJS 3.X API 第四章之事件event绑定
2016/10/10 Javascript
详解nodejs 文本操作模块-fs模块(一)
2016/12/22 NodeJs
详解js几个绕不开的事件兼容写法
2017/08/30 Javascript
Node.js学习之地址解析模块URL的使用详解
2017/09/28 Javascript
js实现敏感词过滤算法及实现逻辑
2018/07/24 Javascript
Vue.js递归组件实现组织架构树和选人功能
2019/07/04 Javascript
vue中实现Monaco Editor自定义提示功能
2019/07/05 Javascript
深入浅出vue图片路径的实现
2019/09/04 Javascript
vue如何实现动态加载脚本
2020/02/05 Javascript
Django与遗留的数据库整合的方法指南
2015/07/24 Python
Python定义函数功能与用法实例详解
2019/04/08 Python
python 扩展print打印文件路径和当前时间信息的实例代码
2019/10/11 Python
python的faker库用法
2019/11/28 Python
Python使用QQ邮箱发送邮件报错smtplib.SMTPAuthenticationError
2019/12/20 Python
python重要函数eval多种用法解析
2020/01/14 Python
python关于变量名的基础知识点
2020/03/03 Python
从0到1使用python开发一个半自动答题小程序的实现
2020/05/12 Python
Python jieba库分词模式实例用法
2021/01/13 Python
Sneaker Studio匈牙利:购买运动鞋
2018/03/26 全球购物
女大学生自我鉴定
2013/12/09 职场文书
致接力运动员广播稿
2014/02/17 职场文书
讲文明树新风公益广告宣传方案
2014/02/25 职场文书
开学典礼决心书
2014/03/11 职场文书
篮球兴趣小组活动总结
2014/07/07 职场文书
导航工程专业自荐信
2014/09/02 职场文书
2014-2015学年工作总结
2014/11/27 职场文书
学生会副主席竞选稿
2015/11/19 职场文书
导游词之吉林花园山
2019/10/17 职场文书
vue-cropper组件实现图片切割上传
2021/05/27 Vue.js