0

http://jsbin.com/aboca3/95/edit

数字とアルファベットを別々に並べ替える作業例を次に示します。

<em>それはうまく機能します、問題は、同じ数のアイテムをアルファベット順にソートしないことです。

たとえば、Salpinestars(58)、Joe Rocket(58)を数字で並べ替えます。逆の順序にする必要があります。

に変更しようとしましitems.sort(sortEm).prependTo(self);items.sort(sortAlpha).sort(sortEm).prependTo(self);が、機能しません。

何かご意見は?

4

2 に答える 2

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;
}
于 2012-05-26T19:58:40.133 に答える
2

2 つの基準でソートする 1 つの関数を作成できます。

// 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;
    }
}
于 2012-05-26T19:59:55.120 に答える