在没有第一项的下拉列表中对项目进行排序

时间:2010-01-12 12:13:17

标签: jquery select sorting drop-down-menu

我有以下代码对下拉列表中的项目进行排序:

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

这种方法很好,除非在我的第一个项目中,我有一个**“请从列表中选择和项目”消息。 。 **

无论如何,我可以对选择列表中的项目进行排序,并始终将“请选择条目”作为列表中的第一项吗?

编辑:

在回答部分答案时,“请选择项目的值始终为0”

6 个答案:

答案 0 :(得分:31)

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

};

是你的功能。

答案 1 :(得分:3)

理论上,我会通过删除“请选择”条目,对列表进行排序,然后在排序完成后再次追加来解决问题

答案 2 :(得分:0)

从选择框中删除第一项,然后将其附加到排序功能后的第一个位置。

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

答案 3 :(得分:0)

总是为该项目返回-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;
});

答案 4 :(得分:0)

如果“请选择...”选项具有与之关联的特定值(此处称为“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
    })) 
}

答案 5 :(得分:0)

首先,您必须保留所选的值,完成排序后,重新选择保留的值。

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