原生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背投广告代码的完善
Apr 08 Javascript
jquery提升性能最佳实践小结
Dec 06 Javascript
js中小数转换整数的方法
Jan 26 Javascript
jQuery学习笔记之jQuery.fn.init()的参数分析
Jun 09 Javascript
深入理解JavaScript系列(30):设计模式之外观模式详解
Mar 03 Javascript
js实现分享到随页面滚动而滑动效果的方法
Apr 10 Javascript
JS制作手机端自适应缩放显示
Jun 11 Javascript
浅谈addEventListener和attachEvent的区别
Jul 14 Javascript
Angularjs实现带查找筛选功能的select下拉框示例代码
Oct 04 Javascript
vue-cli创建的项目,配置多页面的实现方法
Mar 15 Javascript
React Component存在的几种形式详解
Nov 06 Javascript
JavaScript常用工具函数大全
May 06 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 is_dir() 判断给定文件名是否是一个目录
2010/05/10 PHP
php数组函数序列之array_key_exists() - 查找数组键名是否存在
2011/10/29 PHP
php 解决扫描二维码下载跳转问题
2017/01/13 PHP
PHP将字符串首字母大小写转换的实例
2017/01/21 PHP
PHP使用栈解决约瑟夫环问题算法示例
2017/08/27 PHP
PHP正则验证字符串是否为数字的两种方法并附常用正则
2019/02/27 PHP
php正则表达式使用方法整理集合
2020/01/31 PHP
jquery实现的超出屏幕时把固定层变为定位层的代码
2010/02/23 Javascript
javascript制作的滑动图片菜单
2015/05/15 Javascript
js实现tab切换效果实例
2015/09/16 Javascript
jQuery的事件预绑定
2016/12/05 Javascript
js生成随机数方法和实例
2017/01/17 Javascript
JavaScript中 DOM操作方法小结
2017/04/25 Javascript
vue ssr+koa2构建服务端渲染的示例代码
2020/03/23 Javascript
微信分享invalid signature签名错误踩过的坑
2020/04/11 Javascript
node.js +mongdb实现登录功能
2020/06/18 Javascript
关于ES6尾调用优化的使用
2020/09/11 Javascript
解决Vue watch里调用方法的坑
2020/11/07 Javascript
Python中的Matplotlib模块入门教程
2015/04/15 Python
Python学习小技巧之利用字典的默认行为
2017/05/20 Python
python在ubuntu中的几种安装方法(小结)
2017/12/08 Python
python命名空间(namespace)简单介绍
2019/08/10 Python
Python 可变类型和不可变类型及引用过程解析
2019/09/27 Python
css3 利用transform打造走动的2D时钟
2020/10/20 HTML / CSS
HTML5打开手机扫码功能及优缺点
2017/11/27 HTML / CSS
印尼美容产品购物网站:PerfectBeauty.id
2017/12/01 全球购物
慕尼黑山地运动、户外服装和体育用品专家:Sporthaus Schuster
2019/08/27 全球购物
德国受欢迎的旅游和休闲网站:lastminute.de
2019/09/23 全球购物
一套SQL笔试题
2016/08/14 面试题
高级电工工作职责
2013/11/21 职场文书
党务公开方案
2014/05/06 职场文书
2014和解协议书范文
2014/09/15 职场文书
关于远足的感想
2015/08/10 职场文书
如何使JavaScript休眠或等待
2021/04/27 Javascript
Pandas加速代码之避免使用for循环
2021/05/30 Python
JS实现刷新网页后之前浏览位置保持不变示例详解
2022/08/14 Javascript