сортировать элементы в выпадающем списке без первого элемента - PullRequest
14 голосов
/ 12 января 2010

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

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»

Ответы [ 6 ]

31 голосов
/ 12 января 2010
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);              

};

ваша функция.

3 голосов
/ 12 января 2010

Теоретически, я бы подошел к проблеме, удалив запись «Пожалуйста, выберите», отсортировав список, а затем добавив его снова, как только сортировка будет завершена.

0 голосов
/ 30 января 2012

Сначала необходимо сохранить выбранное значение, а после завершения сортировки повторно выбрать сохраненное значение.

#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); 
0 голосов
/ 12 января 2010

Если с опцией «Пожалуйста, выберите ...» связано определенное значение (здесь называемое «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
    })) 
}
0 голосов
/ 12 января 2010

Как насчет того, чтобы всегда возвращать -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;
});
0 голосов
/ 12 января 2010

Удалите первый элемент из поля выбора, а затем добавьте его на первую позицию после функции сортировки.

$(selectId).html($(selectId + " option:not(':first-child')").sort(function(a, b) {
       return a.text == b.text ? 0 : a.text < b.text ? -1 : 1
    }))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...