原生JS实现列表子元素顺序反转的方法分析
程序员文章站
2022-04-10 17:53:34
本文实例讲述了原生js实现列表子元素顺序反转的方法。分享给大家供大家参考,具体如下:
编写一个函数将一个列表里面的所有子元素顺序反转,问题不难但是解决的方法却有多种,而且...
本文实例讲述了原生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数据结构与算法技巧总结》、《javascript数组操作技巧总结》、《javascript排序算法总结》、《javascript遍历算法与技巧总结》、《javascript查找算法技巧总结》及《javascript错误与调试技巧总结》
希望本文所述对大家javascript程序设计有所帮助。