【发布时间】:2010-09-23 04:40:27
【问题描述】:
我正在寻找一些示例代码,这些代码将按字母顺序对 HTML 列表中的列表项进行排序。有人可以帮忙吗?
这是一个供人们一起工作的示例列表:
<ul class="alphaList">
<li>apples</li>
<li>cats</li>
<li>bears</li>
</ul>
【问题讨论】:
我正在寻找一些示例代码,这些代码将按字母顺序对 HTML 列表中的列表项进行排序。有人可以帮忙吗?
这是一个供人们一起工作的示例列表:
<ul class="alphaList">
<li>apples</li>
<li>cats</li>
<li>bears</li>
</ul>
【问题讨论】:
var items = $('.alphaList > li').get();
items.sort(function(a,b){
var keyA = $(a).text();
var keyB = $(b).text();
if (keyA < keyB) return -1;
if (keyA > keyB) return 1;
return 0;
});
var ul = $('.alphaList');
$.each(items, function(i, li){
ul.append(li); /* This removes li from the old spot and moves it */
});
【讨论】:
.append 时,它实际上会从旧位置移除元素并将其放入新位置。
试试这个:
var elems = $('.alphalist li').detach().sort(function (a, b) {
return ($(a).text() < $(b).text() ? -1
: $(a).text() > $(b).text() ? 1 : 0);
});
$('.alphalist').append(elems);
【讨论】:
对于未来的谷歌用户,我发现这个插件非常有用。它可以选择为非拉丁语言定义字符顺序。
旧版本(依赖 jQuery)
$('.submenu > li').tsort({
charOrder: 'abcçdefgğhıijklmnoöprsştuüvyz'
});
对于纯英文字符,不需要定义选项
$('.submenu > li').tsort();
当前版本(独立于 jQuery)(2016 年 3 月 29 日)
当前版本的 tinysort 现在独立于 jQuery。纯 JavaScript。我更新了 jsfiddle 以供新版本使用。
tinysort('.submenu > li', {
charOrder: 'abcçdefgğhıijklmnoöprsştuüvyz'
});
【讨论】:
localeCompare 函数不能说明这一点吗? developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
<script type="text/javascript">$('.sortAlpha > li').tsort();</script> 也很好用!
localeCompare 的支持不是那么好。需要 IE 11,桌面 Safari 和大多数移动浏览器根本不支持它。因此,在不久的将来使用它不会是最佳做法。
charOrder 仅用于区域设置支持。仅限英文字符,tsort() 本身就足够了。