Сортировка параметров выбора с помощью jquery

Я финансирую очень хорошую сортировку здесь Как отсортировать список по алфавиту с помощью jQuery? работает почти идеально, за исключением того, что он выглядит как сортировка только первым чахатчиком, например если у вас есть что-то вроде

0-5000
5001-10000
10001-15000
15001-20000

порядок будет выглядеть как

0-5000
10001-15000
15001-20000
5001-10000

вместо

0-5000
5001-10000
10001-15000
15001-20000

Я отменяю функцию для каждого выбора в форме

var mylist = $('#myformid select');

$(mylist).each(function (sorter, elm) { 
  var listitems = $(this).children('option.myoptionclass').get();
   listitems.sort(function(a, b) {
      var compA = $(a).text().toUpperCase();
      var compB = $(b).text().toUpperCase();
      return (compA < compB) ? -1 : (compA > compB) ? 1 : 0;
   })
     $.each(listitems, function(idx, itm) { 
          $(this).parent().append(itm); 
      });

});

вот живой пример

http://jsfiddle.net/sQsZQ/6/

любая помощь приветствуется!

Ответ 1

Я редактировал вашу скрипку: http://jsfiddle.net/CBD33/2/ Я использую parseInt, поэтому сравнение выглядит следующим образом:

listitems.sort(function(a, b) {
  var compA = $(a).text().toUpperCase();
  var compB = $(b).text().toUpperCase();
  compA = (parseInt(compA,10) || compA)
  compB = (parseInt(compB,10) || compB)              


  return (compA < compB) ? -1 : (compA > compB) ? 1 : 0;
})

Если первый символ строкового значения, присвоенный parseInt, представляет собой цифру, он будет анализировать все до первого нецифрового символа. Если первый символ не является цифрой, он вернет NaN. Мое использование || довольно ленивое, но я уверен, что вы можете придумать лучшее условие.

Ответ 2

Вам нужно преобразовать строку в числа, прежде чем сортировать как

   var compA = parseInt($(a).text().split('-')[0]);
   var compB = parseInt($(b).text().split('-')[0]);

см. http://jsfiddle.net/sQsZQ/8/