我正在尝试按字母顺序对<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);
答案 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');
答案 1 :(得分:0)
排序设置用于排序字典数据,例如字符串,而不是DOM对象。可以使用jQuery sort命令对其他类型的数据或对象进行排序,但是您需要使用排序函数。
排序函数接受两个参数,通常按惯例写为a
和b
,并根据这些项返回布尔响应。对于此特定情况,您希望按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)
。