jQuery sort <li>按字母顺序无法正常工作</li>

时间:2013-04-08 16:30:32

标签: jquery sorting

我正在尝试按字母顺序对<li>进行排序,但出于某种原因,它们的顺序不正确。我感觉这是因为items.push中的整个<li>标签,但我这样做是为了保留列表项所具有的当前类和数据属性。我有不同的方法吗?

var items = [];

$("ul.cat-list li").each(function(){
     var liClass = $(this).attr("class");
     items.push("<li class="+liClass+" data-task="+$(this).data("task")+">"+$(this).html()+"</li>");
});

items.sort();

$("ul.alpha-list").html(items);

2 个答案:

答案 0 :(得分:2)

您似乎想要克隆元素,您可以使用jQuery clone方法并根据其html内容对元素进行排序。

$('ul.cat-list li').clone().sort(function(a, b){
   return $.trim(a.innerHTML) > $.trim(b.innerHTML);
}).appendTo('ul.alpha-list');

http://jsfiddle.net/LmjTS/

答案 1 :(得分:0)

排序设置用于排序字典数据,例如字符串,而不是DOM对象。可以使用jQuery sort命令对其他类型的数据或对象进行排序,但是您需要使用排序函数。

排序函数接受两个参数,通常按惯例写为ab,并根据这些项返回布尔响应。对于此特定情况,您希望按li项的内部HTML进行排序,因此Adam&gt; Bob,因此我们需要以下功能:

function mySort(a,b){
    return ( $(a).html() > $(b).html()) ? 1 :
      (a.html() < b.html()) ? -1 :
     0
}

所以这里他有一个函数,如果a的内容按字典顺序大于b,则返回'1',如果'b'更大,则返回'-1',如果是'b',则返回0假设我没有犯任何错误,则相等或无法排序。然后将此函数作为参数传递给sort,即myArray.sort(mySort)