sort items in a dropdown list without the first it

2019-02-11 23:54发布

I have the following code to sort the items in a dropdown list:

function sortDropDownListByText(selectId) {
    $(selectId).html($(selectId + " option").sort(function(a, b) {
       return a.text == b.text ? 0 : a.text < b.text ? -1 : 1
    })) 
}

this works fine except in cases where, in my first item, i have a **"Please select and item from the list" message . . **

is there anyway i can sort the items in the select list and keep the "Please select entry" as the first item in the list always?

EDIT:

In response to some of the answers, the "Please select item always has a value of 0"

6条回答
一纸荒年 Trace。
2楼-- · 2019-02-12 00:10

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
    }))
查看更多
劫难
3楼-- · 2019-02-12 00:12

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;
});
查看更多
Animai°情兽
4楼-- · 2019-02-12 00:16

Theoretically, I would approach the problem by removing the "Please select" entry, sorting the list, then append it again, once the sorting is done

查看更多
Melony?
5楼-- · 2019-02-12 00:17

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); 
查看更多
Viruses.
6楼-- · 2019-02-12 00:19
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.

查看更多
乱世女痞
7楼-- · 2019-02-12 00:23

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
    })) 
}
查看更多
登录 后发表回答