У меня есть следующий код для сортировки объектов в выпадающем списке:
function sortDropDownListByText(selectId) {
$(selectId).html($(selectId + " option").sort(function(a, b) {
return a.text == b.text ? 0 : a.text < b.text ? -1 : 1
}))
}
это хорошо работает кроме случаев, где в моем первом объекте я имею **, "Выберите и объект из списка" сообщение.. **
есть ли так или иначе, я могу отсортировать объекты в списке выборки и сохранить, "Выберите запись" как первый объект в списке всегда?
В ответ на некоторые ответы "Выберите объект, всегда имеет значение 0"
function sortDropDownListByText(selectId) {
var foption = $('#'+ selectId + ' option:first');
var soptions = $('#'+ selectId + ' option:not(:first)').sort(function(a, b) {
return a.text == b.text ? 0 : a.text < b.text ? -1 : 1
});
$('#' + selectId).html(soptions).prepend(foption);
};
- это ваша функция.
Извлеките первый элемент из поля выбора и добавьте его в первую позицию после функции сортировки.
$(selectId).html($(selectId + " option:not(':first-child')").sort(function(a, b) {
return a.text == b.text ? 0 : a.text < b.text ? -1 : 1
}))
Теоретически, я бы подошел к проблеме, удалив запись "Пожалуйста, выберите", отсортировав список, а затем добавив его снова, как только сортировка будет завершена
.Если параметр «Пожалуйста, выберите ...» имеет определенное значение (здесь называется «DummyVal») С этим вы можете использовать это в вашей функции сравнения:
function sortDropDownListByText(selectId, dummyVal) {
$(selectId).html($(selectId + " option").sort(function(a, b) {
if (a.value == dummyVal) {
return -1;
}
return a.text == b.text ? 0 : a.text < b.text ? -1 : 1
}))
}
Как насчет всегда возвращаться -1
для этого элемента?
$(selectId).html($(selectId + " option").sort(function(a, b) {
return a.text == "Please select an item from the list" ? -1 : a.text < b.text ? -1 : 1;
});
Более динамично:
$(selectId).html($(selectId + " option").sort(function(a, b) {
return a.text == $(selectId + 'option:first').text ? -1 : a.text < b.text ? -1 : 1;
});