原生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 相关文章推荐
特殊字符、常规符号及其代码对照表
Jun 26 Javascript
javascript 装载iframe子页面,自适应高度
Mar 20 Javascript
javascript调试说明
Jun 07 Javascript
JS文本框追加多个下拉框的值的简单实例
Jul 12 Javascript
jQuery分别获取选中的复选框值的示例
Jun 17 Javascript
jQuery中:focus选择器用法实例
Dec 30 Javascript
Bootstrapvalidator校验、校验清除重置的实现代码(推荐)
Sep 28 Javascript
JavaScript表单验证完美代码
Mar 02 Javascript
input框中自动展示当前日期yyyy/mm/dd的实现方法
Jul 06 Javascript
js 数组详细操作方法及解析合集
Jun 01 Javascript
javascript事件循环event loop的简单模型解释与应用分析
Mar 14 Javascript
JavaScript内置对象之Array的使用小结
May 12 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
PHP4实际应用经验篇(1)
2006/10/09 PHP
PHP实现MVC开发得最简单的方法――模型
2007/04/10 PHP
Zend Studio使用技巧两则
2016/04/01 PHP
php面向对象程序设计中self与static的区别分析
2019/05/21 PHP
推荐30个新鲜出炉的精美 jQuery 效果
2012/03/26 Javascript
jquery 插件学习(六)
2012/08/06 Javascript
在JavaScript并非所有的一切都是对象
2013/04/11 Javascript
js使用数组判断提交数据是否存在相同数据
2013/11/27 Javascript
JavaScript实现点击文字切换登录窗口的方法
2015/05/11 Javascript
JS实现的表格行鼠标点击高亮效果代码
2015/11/27 Javascript
vue快捷键与基础指令详解
2017/06/01 Javascript
js 公式编辑器 - 自定义匹配规则 - 带提示下拉框 - 动态获取光标像素坐标
2018/01/04 Javascript
JavaScript类的继承操作实例总结
2018/12/20 Javascript
如何正确解决VuePress本地访问出现资源报错404的问题
2020/12/03 Vue.js
[09:34]2018DOTA2国际邀请赛寻真——永不放弃的iG
2018/08/14 DOTA
[02:11]完美世界DOTA2联赛10月28日赛事精彩集锦:来吧展示实力强劲
2020/10/29 DOTA
python函数返回多个值的示例方法
2013/12/04 Python
python实现获取Ip归属地等信息
2016/08/27 Python
Python列表推导式与生成器表达式用法示例
2018/02/08 Python
django 类视图的使用方法详解
2019/07/24 Python
Python学习笔记之字符串和字符串方法实例详解
2019/08/22 Python
使用pyhon绘图比较两个手机屏幕大小(实例代码)
2020/01/03 Python
python中sympy库求常微分方程的用法
2020/04/28 Python
Python获取浏览器窗口句柄过程解析
2020/07/25 Python
详解python爬取弹幕与数据分析
2020/11/14 Python
python实现ping命令小程序
2020/12/28 Python
台湾母婴用品限时团购:妈咪爱
2018/08/03 全球购物
新加坡网上花店:FlowerAdvisor新加坡
2018/10/05 全球购物
95%的面试官都会问到的50道Java线程题,附答案
2012/08/03 面试题
大气污染防治方案
2014/05/19 职场文书
街道党工委党的群众路线教育实践活动对照检查材料思想汇报
2014/10/05 职场文书
公司财务部岗位职责
2015/04/14 职场文书
圣贤教育改变命运观后感
2015/06/16 职场文书
幼儿教师远程研修感悟
2015/11/18 职场文书
Golang原生rpc(rpc服务端源码解读)
2022/04/07 Golang
Windows server 2016服务器基本设置
2022/08/14 Servers