原生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阻止事件冒泡 event.stopPropagation
Dec 11 Javascript
web开发人员学习jQuery的6大理由及jQuery的优势介绍
Jan 03 Javascript
jquery formValidator插件ajax验证 内容不做任何修改再离开提示错误的bug解决方法
Jan 04 Javascript
文件编码导致jquery失效的解决方法
Jun 26 Javascript
jquery validation验证身份证号,护照,电话号码,email(实例代码)
Nov 06 Javascript
jQuery实现可用于博客的动态滑动菜单
Mar 09 Javascript
AngularJS基础 ng-href 指令用法
Aug 01 Javascript
Jquery Easyui自定义下拉框组件使用详解(21)
Dec 31 Javascript
详解Javascript获取缓存和清除缓存API
May 25 Javascript
laravel5.4+vue+element简单搭建的示例代码
Aug 29 Javascript
一个Java程序猿眼中的前后端分离以及Vue.js入门(推荐)
Apr 19 Javascript
JS端基于download.js实现图片、视频时直接下载而不是打开预览
May 09 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
一个可以删除字符串中HTML标记的PHP函数
2006/10/09 PHP
PHP实现过滤掉非汉字字符只保留中文字符
2015/06/04 PHP
PHP 中TP5 Request 请求对象的实例详解
2017/07/31 PHP
jquery 元素相对定位代码
2010/10/15 Javascript
js实现单一html页面两套css切换代码
2013/04/11 Javascript
jquery实现商品拖动选择效果代码(自写)
2013/05/28 Javascript
jquery实现不同大小浏览器使用不同的css样式表的方法
2014/04/02 Javascript
javascript中传统事件与现代事件
2015/06/23 Javascript
理解JavaScript中worker事件api
2015/12/25 Javascript
JavaScript 不支持 indexof 该如何解决
2016/03/30 Javascript
Javascript将双字节字符转换成单字节字符并计算长度
2016/06/22 Javascript
详细分析Javascript中创建对象的四种方式
2016/08/17 Javascript
javascript简易画板开发
2020/04/12 Javascript
微信小程序 wxapp内容组件 text详细介绍
2016/10/31 Javascript
史上最全JavaScript数组去重的十种方法(推荐)
2017/08/17 Javascript
Angular之toDoList的实现代码示例
2017/12/02 Javascript
webstorm添加*.vue文件支持
2018/05/08 Javascript
深入理解vue中的slot与slot-scope
2019/04/22 Javascript
echarts大屏字体自适应的方法步骤
2019/07/12 Javascript
JavaScript实现抖音罗盘时钟
2019/10/11 Javascript
vue 微信扫码登录(自定义样式)
2020/01/06 Javascript
vue设置全局访问接口API地址操作
2020/08/14 Javascript
Python脚本暴力破解栅栏密码
2015/10/19 Python
Django 如何获取前端发送的头文件详解(推荐)
2017/08/15 Python
Python分支语句与循环语句应用实例分析
2019/05/07 Python
python 实现兔子生兔子示例
2019/11/21 Python
基于Python检测动态物体颜色过程解析
2019/12/04 Python
Django 后台带有字典的列表数据与页面js交互实例
2020/04/03 Python
Expected conditions模块使用方法汇总代码解析
2020/08/13 Python
教育专业自荐书范文
2013/12/17 职场文书
求职信的要素有哪些呢
2013/12/26 职场文书
小学生环保倡议书
2014/05/15 职场文书
中学生思想品德评语
2014/12/31 职场文书
餐饮服务员岗位职责
2015/02/09 职场文书
《称赞》教学反思
2016/02/17 职场文书
一文搞懂Python Sklearn库使用
2021/08/23 Python