原生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 showModalDialog 内跳转页面的问题
Nov 25 Javascript
javascript弹出页面回传值的方法
Jan 28 Javascript
JavaScript模拟重力状态下抛物运动的方法
Mar 03 Javascript
javascript实现unicode与ASCII相互转换的方法
Dec 10 Javascript
使用jQuery的easydrag插件实现可拖动的DIV弹出框
Feb 19 Javascript
AngularJS实现星星等级评分功能
Sep 24 Javascript
JS常用正则表达式总结【经典】
May 12 Javascript
easyui简介_动力节点Java学院整理
Jul 14 Javascript
在 Vue.js中优雅地使用全局事件的方法
Feb 01 Javascript
如何测量vue应用运行时的性能
Jun 21 Javascript
Layui实现带查询条件的分页
Jul 27 Javascript
vue实现水波涟漪效果的点击反馈指令
May 31 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
SONY SRF-40W电路分析
2021/03/02 无线电
PHP Token(令牌)设计
2008/03/15 PHP
Laravel 5框架学习之路由、控制器和视图简介
2015/04/07 PHP
Laravel路由研究之domain解决多域名问题的方法示例
2019/04/04 PHP
扩展JavaScript功能的正确方法(译文)
2012/04/12 Javascript
JS实现兼容各浏览器解析XML文档数据的方法
2015/06/01 Javascript
JavaScript的Polymer框架中dom-repeat与VM的相关操作
2015/07/29 Javascript
神奇!js+CSS+DIV实现文字颜色渐变效果
2016/03/16 Javascript
Javascript之BOM(window对象)详解
2016/05/25 Javascript
基于MVC5和Bootstrap的jQuery TreeView树形控件(一)之数据支持json字符串、list集合
2016/08/11 Javascript
微信公众号开发 自定义菜单跳转页面并获取用户信息实例详解
2016/12/08 Javascript
Node.js的Mongodb使用实例
2016/12/30 Javascript
微信页面弹出键盘后iframe内容变空白的解决方案
2017/09/20 Javascript
jQuery实现所有验证通过方可提交的表单验证
2017/11/21 jQuery
解决vue中post方式提交数据后台无法接收的问题
2018/08/11 Javascript
运用js实现图层拖拽的功能
2019/05/24 Javascript
浅谈vue的第一个commit分析
2020/06/08 Javascript
[01:04:22]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 IG vs EG
2018/04/01 DOTA
[01:32:10]NAVI vs VG Supermajor 败者组 BO3 第一场 6.5
2018/06/06 DOTA
Python中type的构造函数参数含义说明
2015/06/21 Python
python matlibplot绘制3D图形
2018/07/02 Python
详解Appium+Python之生成html测试报告
2019/01/04 Python
总结Python图形用户界面和游戏开发知识点
2019/05/22 Python
python绘制规则网络图形实例
2019/12/09 Python
Python2与Python3的区别详解
2020/02/09 Python
Numpy(Pandas)删除全为零的列的方法
2020/09/11 Python
国际贸易专业个人鉴定
2014/02/22 职场文书
小学数学课后反思
2014/04/23 职场文书
护理专业毕业生自荐信
2014/06/15 职场文书
厨师长岗位职责范本
2014/08/25 职场文书
领导党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
节水倡议书
2015/01/19 职场文书
2015年学校办公室主任工作总结
2015/07/20 职场文书
预备党员入党感言
2015/08/01 职场文书
vue backtop组件的实现完整代码
2021/04/07 Vue.js
通过feDisplacementMap和feImage实现水波特效
2022/04/24 HTML / CSS