Сортировка параметров выбора с помощью 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/