javascript - Jquery incorrectly sort <li> by id -
i have <li> sort 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> the code use:
<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> the result is:
<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> the <li> no not sorted correctly, can cause problem?
the problem did not implement sort function correctly. function supposed return positive number, negative number or zero; you're returning true/false.
so when a.id less than/equal b.id function returns false zero-ish; treated a.id equal b.id; puts sorting function off track.
solution change this:
return parseint(a.id.replace('member_', '')) > parseint(b.id.replace('member_', '')); to this:
return parseint(a.id.replace('member_', '')) - parseint(b.id.replace('member_', '')); having said that, rewrite code using detach , single appendto this:
$("li[id*='member_']").detach().sort(function(a, b) { return +a.id.replace("member_", "") - b.id.replace("member_", ""); }).appendto("ul#members-list");
Comments
Post a Comment