我有<li>
按ID排序:
<ul id="members-list">
<li id="member_8">
<li id="member_4">
<li id="member_7">
<li id="member_12">
<li id="member_11">
<li id="member_13">
<li id="member_5">
<li id="member_6">
<li id="member_9">
<li id="member_3">
<li id="member_2">
<li id="member_1">
<li id="member_10">
</ul>
我使用的代码:
<script>
$( document ).ready(function() {
$("li[id*='member_']").sort(function (a, b) {
return parseInt(a.id.replace('member_', '')) > parseInt(b.id.replace('member_', ''));
}).each(function () {
var elem = $(this);
elem.remove();
$(elem).appendTo("ul#members-list");
});
});
</script>
结果是:
<ul id="members-list">
<li id="member_5">
<li id="member_8">
<li id="member_7">
<li id="member_1">
<li id="member_2">
<li id="member_3">
<li id="member_4">
<li id="member_6">
<li id="member_9">
<li id="member_10">
<li id="member_11">
<li id="member_12">
<li id="member_13">
</ul>
<li>
没有正确排序,会导致什么问题?
答案 0 :(得分:6)
问题是您没有正确实现sort
功能。该函数应该返回正数,负数或零;你回来是真假。
因此,当a.id小于/等于b.id时,函数返回false,即0-ish;被视为 a.id等于b.id ;这会使排序功能脱离轨道。
解决方案是改变这个:
return parseInt(a.id.replace('member_', '')) > parseInt(b.id.replace('member_', ''));
对此:
return parseInt(a.id.replace('member_', '')) - parseInt(b.id.replace('member_', ''));
说了这么多,你可以使用detach
和一个appendTo
重写你的代码:
$("li[id*='member_']").detach().sort(function(a, b) {
return +a.id.replace("member_", "") - b.id.replace("member_", "");
}).appendTo("ul#members-list");
答案 1 :(得分:3)
假设您没有两次相同的号码,您可以使用:
return (parseInt(a.id.replace('member_', '')) > parseInt(b.id.replace('member_', ''))) ? 1 : -1;
Salman答案适用于所有情况。
sort()期望值1,0,-1为返回值:Array.prototype.sort(),因此您不应使用&gt;登录。