http://jsbin.com/aboca3/95/edit
以下是单独数字和字母排序的工作示例。
效果很好,问题是,它没有按字母顺序对具有相同<em>
个数字的项目进行排序。
E.g。它给出了Salpinestars(58),Joe Rocket(58)的数字排序。应该给出相反的顺序。
我尝试将items.sort(sortEm).prependTo(self);
更改为items.sort(sortAlpha).sort(sortEm).prependTo(self);
,但它不起作用。
有什么想法吗?
答案 0 :(得分:3)
使用此sortEm():
function sortEm(a,b){
var emA = parseInt($('em',a).text().replace(/[\(\)]/g,''));
var emB = parseInt($('em',b).text().replace(/[\(\)]/g,''));
if (emA == emB) { // sort alphabetically if em number are equal
return sortAlpha(a,b);
}
return emA < emB ? 1 : -1;
}
答案 1 :(得分:2)
您可以编写一个函数来按两个标准排序。
// ORDER BY EmValue, LiMinusEmText
function sortBoth(a, b) {
var aText = $(a).text().replace(/\(\d+\)\s*$/, ""); // chop off the bracket
var bText = $(b).text().replace(/\(\d+\)\s*$/, ""); // and numbers portion
var aValue = +$(a).find("em").text().replace(/\D/g, ""); // parse out em value
var bValue = +$(b).find("em").text().replace(/\D/g, ""); // and convert to number
if (aValue == bValue) {
if (aText == bText) {
return 0;
}
else if (aText < bText) {
return -1;
}
else /*if (aText > bText)*/ {
return 1;
}
}
else {
return aValue - bValue;
}
}
// ORDER BY LiMinusEmText, EmValue
function sortBoth(a, b) {
var aText = $(a).text().replace(/\(\d+\)\s*$/, ""); // chop off the bracket
var bText = $(b).text().replace(/\(\d+\)\s*$/, ""); // and numbers portion
var aValue = +$(a).find("em").text().replace(/\D/g, ""); // parse out em value
var bValue = +$(b).find("em").text().replace(/\D/g, ""); // and convert to number
if (aText == bText) { // strings value same?
return aValue - bValue; // then return a - b
}
else if (aText < bText) {
return -1;
}
else /*if (aText > bText)*/ {
return 1;
}
}