用JS排序有没有好办法

daswcszxw 2015-07-22 07:58:38

<div class='abc'>
<dl>
<dd></dd><dd></dd><dd></dd>...
</dl>

我能想到的办法是得到dd.length之后用.sort() 正序,倒序排

大概两三千个dd,有什么性能好的办法?
...全文
194 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
KK3K2005 2015-07-23
  • 打赏
  • 举报
回复
先逻辑排序 在吧逻辑次序渲染到屏幕上 吧dd变成数据 弄成一个数组 排序完后 在根据数组的新的次序重新 刷新dd的位置
sydhr_1994 2015-07-23
  • 打赏
  • 举报
回复
你去百度个算法吧 排序算法有很多 但是我不懂 - -
daswcszxw 2015-07-23
  • 打赏
  • 举报
回复
行不行我先试试, 太慢的话就程序输出两次,做个隐藏层好咯.

<!doctype html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<a href="#" id="asc">正序</a>  |  <a href="#" id="desc">倒序</a>
<dl id="allsection">
    <dd><a href="#1">第1</a></dd>
    <dd><a href="#2">第2</a></dd>
    <dd><a href="#3">第3</a></dd>
    <dd><a href="#4">第4</a></dd>
    <dd><a href="#5">第5</a></dd>
    <dd><a href="#6">第6</a></dd>
    <dd><a href="#7">第7</a></dd>
    <dd><a href="#8">第8</a></dd>
    <dd><a href="#9">第9</a></dd>
    <dd><a href="#10">第10</a></dd>
    <dd><a href="#11">第11</a></dd>
    <dd><a href="#12">第12</a></dd>
    <dd><a href="#13">第13</a></dd>
    <dd><a href="#14">第14</a></dd>
</dl>
<script type="text/javascript" src="static/js/jquery-1.7.1.min.js"></script>	
<script type="text/javascript">
var section = $("#allsection dd"),sectionlist = [];
for(var i = 0;i<section.length;i++){
    sectionlist.push(section[i].innerHTML)
}
$("#asc").click(function(){
	sectionlist.sort(function(a,b){return a>b?1:-1});
	document.write(sectionlist+"<br/>");
})
</script>
<body>
</html>
问题1,这个排序那里不对? 问题2,想要的效果是只得到DD里面的内容,分别插入DD,click之后怎么操作呢?
luhuiming741cs 2015-07-23
  • 打赏
  • 举报
回复
最好不要去对DOM排序吧,你怎么高效排序都还是渲染很慢的 dd里面内容排序,再一个一个生成dd 三千多显示出来是会卡的
hch126163 2015-07-23
  • 打赏
  • 举报
回复
数据多考虑 分批【分页】加载
似梦飞花 2015-07-23
  • 打赏
  • 举报
回复
sort数据后innerHTML到父元素里 不要直接排序dom 效率很低的
xuzuning 2015-07-23
  • 打赏
  • 举报
回复
你 #5 的排序没有错,但用 document.write 写回去就不对了 要再遍历 $("#allsection dd"),把新的 sectionlist 填回去
天际的海浪 2015-07-23
  • 打赏
  • 举报
回复
引用 5 楼 webyellow 的回复:
行不行我先试试, 太慢的话就程序输出两次,做个隐藏层好咯. 问题1,这个排序那里不对? 问题2,想要的效果是只得到DD里面的内容,分别插入DD,click之后怎么操作呢?
你的数据是字符串,这样是按字符串逐个字符比较进行排序的。 比如 "#10"中的第二位是1,1的字符编码 少于 "#9"中第二位 9 的编码, 所以 "#10" 少于 "#9" 你应该把关键数值用正则表达式提取出来并转换为数值型数据,再进行排序
白狼水 2015-07-23
  • 打赏
  • 举报
回复
你通过jQuery 获取所有tb标签 为一个数组。然后用sort方法进行排序。这个应该不会影响什么性能吧。
天际的海浪 2015-07-22
  • 打赏
  • 举报
回复
排序算法不是有很多的么,算法这东西是任何语言都通用的,网上找个对大数据排序速度快的排序算法,改成js的语法不就好了

87,987

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧