-2

这就是我试图按字母顺序对我进行排序的<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);
4

2 回答 2

2

看来您想克隆元素,您可以使用 jQueryclone方法并根据元素的 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/

于 2013-04-08T16:46:27.353 回答
0

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

排序函数接受两个参数,通常按约定编写,ab根据这些项目返回布尔响应。对于这种特殊情况,您希望按li项目的内部 HTML 进行排序,因此Adam> Bob,因此我们需要如下所示的函数:

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

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

于 2013-04-08T16:54:32.663 回答