在jQuery中订购<UL>/<OL>的最简单方法是什么?

Eri*_*ver 42 sorting jquery

我正在寻找一些示例代码,它将按字母顺序对HTML列表中的列表项进行排序.有人可以帮忙吗?

以下是供人们使用的示例列表:

<ul class="alphaList">
    <li>apples</li>
    <li>cats</li>
    <li>bears</li>
</ul>
Run Code Online (Sandbox Code Playgroud)

Cha*_*atu 93

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 */
});
Run Code Online (Sandbox Code Playgroud)

  • @Acute:不,你没必要.当你执行`.append`时,它实际上将从旧位置移除元素并将其放入新位置. (10认同)
  • 这将对数字进行排序,然后是大写字母,然后是小写字母。即[“ 5”,“ A”,“ B”,“ a”,“ b”]可能不是某些人所寻找的。 (3认同)
  • @TonyR:这就是JavaScript如何排序字符串.我想你可以根据需要将字符串更改为大写/小写. (3认同)
  • @Chatu:你不应该在追加之前清空ul吗? (3认同)

Erg*_*gec 7

对于未来的googlers,我发现这个插件非常有用.它可以选择定义非拉丁语言的字符顺序.

旧版本(依赖于jQuery)

$('.submenu > li').tsort({
    charOrder: 'abcçdefg?h?ijklmnoöprs?tuüvyz'
});
Run Code Online (Sandbox Code Playgroud)

对于仅英文字符,无需定义任何选项

$('.submenu > li').tsort();
Run Code Online (Sandbox Code Playgroud)

当前版本(独立于jQuery)(2016年3月29日)

当前版本的tinysort现在独立于jQuery.纯JavaScript.我更新了jsfiddle用于新版本的用法.

tinysort('.submenu > li', {
    charOrder: 'abcçdefg?h?ijklmnoöprs?tuüvyz'
});
Run Code Online (Sandbox Code Playgroud)

演示 http://jsfiddle.net/ergec/EkScy/

网站 http://tinysort.sjeiti.com/


小智 7

试试这个:

var elems = $('.alphalist li').detach().sort(function (a, b) {
  return ($(a).text() < $(b).text() ? -1 
        : $(a).text() > $(b).text() ? 1 : 0);
}); 
$('.alphalist').append(elems);
Run Code Online (Sandbox Code Playgroud)