Сортировать элементы в выпадающем списке без первого элемента
У меня есть следующий код для сортировки элементов в выпадающем списке:
function sortDropDownListByText(selectId) {
$(selectId).html($(selectId + " option").sort(function(a, b) {
return a.text == b.text ? 0 : a.text < b.text ? -1 : 1
}))
}
это отлично работает, за исключением случаев, когда в моем первом элементе у меня есть сообщение "Пожалуйста, выберите и элемент из списка"., **
так или иначе, я могу сортировать элементы в списке выбора и сохранять "Пожалуйста, выберите запись" в качестве первого элемента в списке всегда?
EDIT:
В ответ на некоторые из ответов "Пожалуйста, выберите элемент всегда имеет значение 0"
Ответы
Ответ 1
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);
};
- ваша функция.
Ответ 2
Теоретически я бы подошел к проблеме, удалив запись "Пожалуйста, выберите", отсортировав список, а затем добавьте его снова, как только сортировка будет выполнена
Ответ 3
Удалите первый элемент из окна выбора и добавьте его в первую позицию после функции сортировки.
$(selectId).html($(selectId + " option:not(':first-child')").sort(function(a, b) {
return a.text == b.text ? 0 : a.text < b.text ? -1 : 1
}))
Ответ 4
Как насчет того, чтобы всегда возвращать -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;
});
Ответ 5
Если параметр "Пожалуйста, выберите..." имеет определенное значение (здесь называется "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
}))
}
Ответ 6
Сначала вы должны сохранить выбранное значение, и как только вы закончите сортировку, вы снова выберите сохраненное значение.
#store the selected value.
var selectedVal = $(selectId).val();
# start sorting.
$(selectId).html( $(selectId+" option").sort(function(a, b) {
return a.text == b.text ? 0 : a.text < b.text ? -1 : 1
}));
#re-select the preserved value.
$(selectId).val(selectedVal);