在 Select2 中按名称排序
Sort by name in Select2
有什么方法可以按名称对 select2 生成的列表进行排序吗?我有一些代码:
var dataUser = [{
"id": "5",
"text": "BTest"
}, {
"id": "2",
"text": "ATest"
}, {
"id": "8",
"text": "CTest"
}, {
"id": "13",
"text": "DTest"
}];
$("#mylist").select2({
data: dataUser,
templateResult: function(data) {
return data.text;
},
sorter: function(data) {
return data.sort();
}
});
http://jsfiddle.net/oe9retsL/4/
此列表按 ID 排序,但我想按文本排序。
您需要向 sort()
提供一个函数,其中包含比较数组中每个对象的 text
属性 的逻辑。试试这个:
sorter: function(data) {
return data.sort(function(a, b) {
return a.text < b.text ? -1 : a.text > b.text ? 1 : 0;
});
}
要对所选选项进行排序,您需要在选择选项时在标签上实现类似的逻辑,如下所示:
$("#mylist").select2({
data: dataUser,
templateResult: function(data) {
return data.text;
},
sorter: function(data) {
return data.sort(function(a, b) {
return a.text < b.text ? -1 : a.text > b.text ? 1 : 0;
});
}
}).on("select2:select", function (e) {
$('.select2-selection__rendered li.select2-selection__choice').sort(function(a, b) {
return $(a).text() < $(b).text() ? -1 : $(a).text() > $(b).text() ? 1 : 0;
}).prependTo('.select2-selection__rendered');
});
有什么方法可以按名称对 select2 生成的列表进行排序吗?我有一些代码:
var dataUser = [{
"id": "5",
"text": "BTest"
}, {
"id": "2",
"text": "ATest"
}, {
"id": "8",
"text": "CTest"
}, {
"id": "13",
"text": "DTest"
}];
$("#mylist").select2({
data: dataUser,
templateResult: function(data) {
return data.text;
},
sorter: function(data) {
return data.sort();
}
});
http://jsfiddle.net/oe9retsL/4/
此列表按 ID 排序,但我想按文本排序。
您需要向 sort()
提供一个函数,其中包含比较数组中每个对象的 text
属性 的逻辑。试试这个:
sorter: function(data) {
return data.sort(function(a, b) {
return a.text < b.text ? -1 : a.text > b.text ? 1 : 0;
});
}
要对所选选项进行排序,您需要在选择选项时在标签上实现类似的逻辑,如下所示:
$("#mylist").select2({
data: dataUser,
templateResult: function(data) {
return data.text;
},
sorter: function(data) {
return data.sort(function(a, b) {
return a.text < b.text ? -1 : a.text > b.text ? 1 : 0;
});
}
}).on("select2:select", function (e) {
$('.select2-selection__rendered li.select2-selection__choice').sort(function(a, b) {
return $(a).text() < $(b).text() ? -1 : $(a).text() > $(b).text() ? 1 : 0;
}).prependTo('.select2-selection__rendered');
});