Сортировать элементы в выпадающем списке без первого элемента

У меня есть следующий код для сортировки элементов в выпадающем списке:

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);