我有以下代码对下拉列表中的项目进行排序:
function sortDropDownListByText(selectId) {
$(selectId).html($(selectId + " option").sort(function(a, b) {
return a.text == b.text ? 0 : a.text < b.text ? -1 : 1
}))
}
这种方法很好,除非在我的第一个项目中,我有一个**“请从列表中选择和项目”消息。 。 **
无论如何,我可以对选择列表中的项目进行排序,并始终将“请选择条目”作为列表中的第一项吗?
在回答部分答案时,“请选择项目的值始终为0”
答案 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);