I have the following code to sort the items in a dropdown list:
function sortDropDownListByText(selectId) {
$(selectId).html($(selectId + \" option\").so
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);
};
is your function.
First you have to preserve the selected value, and once you finished the sorting you re-select the preserved value.
#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);
Remove the first item from the select box and then append it at the first position after the sort function.
$(selectId).html($(selectId + " option:not(':first-child')").sort(function(a, b) {
return a.text == b.text ? 0 : a.text < b.text ? -1 : 1
}))
How about always returning -1
for that item?
$(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;
});
more dynamically:
$(selectId).html($(selectId + " option").sort(function(a, b) {
return a.text == $(selectId + 'option:first').text ? -1 : a.text < b.text ? -1 : 1;
});
If the "Please select..." option has a certain value (here called "dummyVal") associated with it, you could use this in your comparison function:
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
}))
}
Theoretically, I would approach the problem by removing the "Please select" entry, sorting the list, then append it again, once the sorting is done