Параметры сортировки в списке выбора с помощью javascript/jQuery.. но не в алфавитном порядке
Я ищу функцию, которая возьмет список опций в списке выбора и отсортирует их по алфавиту, но с твист. Все значения с текстом "NA" должны быть сдвинуты в нижнюю часть списка.
Итак, заданный список -
<select>
<option value="1">Car</option>
<option value="2">Bus</option>
<option value="3">NA</option>
<option value="4">Bike</option>
<option value="5">Tractor</option>
<option value="6">NA</option>
</select>
Мы должны в конечном итоге -
<select>
<option value="4">Bike</option>
<option value="2">Bus</option>
<option value="1">Car</option>
<option value="5">Tractor</option>
<option value="3">NA</option>
<option value="6">NA</option>
</select>
Порядок НС не важен.
И не спрашивайте, почему я не могу просто удалить NA (или почему будет несколько вариантов с теми же текстами, но с разными базовыми значениями, потому что я тоже не согласен с ним.
Ответы
Ответ 1
demo: http://jsfiddle.net/4bvVz/
function NASort(a, b) {
if (a.innerHTML == 'NA') {
return 1;
}
else if (b.innerHTML == 'NA') {
return -1;
}
return (a.innerHTML > b.innerHTML) ? 1 : -1;
};
$('select option').sort(NASort).appendTo('select');
Ответ 2
var sb = $('select');
sb.append(sb.find('option').sort(function(a, b){
return (
a = $(a).text(),
b = $(b).text(),
a == 'NA' ? 1 : b == 'NA' ? -1 : 0|a > b
);
}));
Ответ 3
Если у вас более одного выбора на странице (несколько выборок), используйте это:
function NASort(a, b) {
if (a.innerHTML == 'NA') {
return 1;
}
else if (b.innerHTML == 'NA') {
return -1;
}
return (a.innerHTML > b.innerHTML) ? 1 : -1;
};
$('select').each(function( index ) {
$(this).find('option').sort(NASort).appendTo($(this));
});
Ответ 4
Я внес некоторые изменения в исходную функцию, и она отлично работала.
function NASort(a, b) {
console.log(a.innerHTML.substr(0, 1).toLowerCase() + ' > ' + b.innerHTML.substr(0, 1).toLowerCase());
return (a.innerHTML.substr(0, 1).toLowerCase() > b.innerHTML.substr(0, 1).toLowerCase()) ? 1 : -1;
};
$('select option').sort(NASort).appendTo('select');