原生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调用wcf并展示出数据的方法
Jul 07 Javascript
jQuery 过滤方法filter()选择具有特殊属性的元素
Jun 15 Javascript
jQuery实现瀑布流的取巧做法分享
Jan 12 Javascript
JavaScript Date对象详解
Mar 01 Javascript
浅谈jquery设置和获得checkbox选中的问题
Aug 19 Javascript
完美实现js选项卡切换效果(一)
Mar 08 Javascript
JSON 数据格式详解
Sep 13 Javascript
javascript浏览器用户代理检测脚本实现方法
Oct 27 Javascript
vue实现一拉到底的滑动验证
Jul 25 Javascript
vue element-ui table组件动态生成表头和数据并修改单元格格式 父子组件通信
Aug 15 Javascript
vue+elementUI动态增加表单项并添加验证的代码详解
Dec 17 Vue.js
利用Vue实现简易播放器的完整代码
Dec 30 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
收音机史话 - 1960年代前后的DIY
2021/03/02 无线电
zend api扩展的php对象的autoload工具
2011/04/18 PHP
PHP 中关于ord($str)&amp;gt;0x80的详细说明
2012/09/23 PHP
php实现阳历阴历互转的方法
2015/10/28 PHP
PHP开发的文字水印,缩略图,图片水印实现类与用法示例
2019/04/12 PHP
jQuery dialog 异步调用ashx,webservice数据的代码
2010/08/03 Javascript
中文路径导致unitpngfix.js不正常的解决方法
2013/06/26 Javascript
jQuery获得内容和属性方法及示例
2013/12/02 Javascript
Js实现滚动变色的文字效果
2014/06/16 Javascript
jQuery 监控键盘一段时间没输入
2016/04/22 Javascript
jQuery文字提示与图片提示效果实现方法
2016/07/04 Javascript
Js apply方法详解
2017/02/16 Javascript
vue.js默认路由不加载linkActiveClass问题的解决方法
2017/12/11 Javascript
Angular实现的内置过滤器orderBy排序与模糊查询功能示例
2017/12/29 Javascript
Vuex提升学习篇
2018/01/11 Javascript
Express本地测试HTTPS的示例代码
2018/06/06 Javascript
详解Nodejs mongoose
2018/06/10 NodeJs
vue2.0父子组件间传递数据的方法
2018/08/16 Javascript
vue1.0和vue2.0的watch监听事件写法详解
2018/09/11 Javascript
JS+css3实现幻灯片轮播图
2020/08/14 Javascript
vue-cli中实现响应式布局的方法
2021/03/02 Vue.js
python进程管理工具supervisor使用实例
2014/09/17 Python
使用Python发送各种形式的邮件的方法汇总
2015/11/09 Python
Diango + uwsgi + nginx项目部署的全过程(可外网访问)
2018/04/22 Python
使用Numpy读取CSV文件,并进行行列删除的操作方法
2018/07/04 Python
python处理RSTP视频流过程解析
2020/01/11 Python
Python3 集合set入门基础
2020/02/10 Python
struct和class的区别
2015/11/20 面试题
C#面试常见问题
2013/02/25 面试题
Linux内核产生并发的原因
2016/11/08 面试题
函授毕业个人自我评价
2014/02/20 职场文书
护理中职生求职信范文
2014/02/24 职场文书
2014年社区宣传工作总结
2014/12/02 职场文书
历史博物馆观后感
2015/06/05 职场文书
mysql获取指定时间段中所有日期或月份的语句(不设存储过程,不加表)
2021/06/18 MySQL
二维码条形码生成的JavaScript脚本库
2022/07/07 Javascript