我想按字母顺序对select2选项进行排序。我有以下代码,想知道如何实现。
<select name="list" id="mylist" style="width:140px;">
<option>United States</option>
<option>Austria</option>
<option>Alabama</option>
<option>Jamaica</option>
<option>Taiwan</option>
<option>canada</option>
<option>palau</option>
<option>Wyoming</option>
</select>
$('#mylist').select2({
sortResults: function(results) { return results.sort(); }
});
我想通过'text'...
对数据进行排序答案 0 :(得分:28)
sortResults
您可以使用sortResults
回调选项对元素进行排序:
$('#mylist').select2({
sortResults: function(data) {
/* Sort data using lowercase comparison */
return data.sort(function (a, b) {
a = a.text.toLowerCase();
b = b.text.toLowerCase();
if (a > b) {
return 1;
} else if (a < b) {
return -1;
}
return 0;
});
}
});
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/select2/3.5.4/select2.min.css" integrity="sha256-ijlUKKj3hJCiiT2HWo1kqkI79NTEYpzOsw5Rs3k42dI=" crossorigin="anonymous" /><script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js" integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/select2/3.5.4/select2.min.js" integrity="sha256-7A2MDY2eGSSUvgfbuH1IdzYk8qkEd3uzwiXADqPDdtY=" crossorigin="anonymous"></script>
<select name="list" id="mylist" style="width:140px;">
<option>United States</option>
<option>Austria</option>
<option>Alabama</option>
<option>Jamaica</option>
<option>Taiwan</option>
<option>canada</option>
<option>palau</option>
<option>Wyoming</option>
</select>
sort
您可以使用sorter
回调选项对元素进行排序:
$('#mylist').select2({
sorter: function(data) {
/* Sort data using lowercase comparison */
return data.sort(function (a, b) {
a = a.text.toLowerCase();
b = b.text.toLowerCase();
if (a > b) {
return 1;
} else if (a < b) {
return -1;
}
return 0;
});
}
});
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.5/css/select2.css" integrity="sha256-xqxV4FDj5tslOz6MV13pdnXgf63lJwViadn//ciKmIs=" crossorigin="anonymous" /><script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js" integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.5/js/select2.min.js" integrity="sha256-FA14tBI8v+/1BtcH9XtJpcNbComBEpdawUZA6BPXRVw=" crossorigin="anonymous"></script>
<select name="list" id="mylist" style="width:140px;">
<option>United States</option>
<option>Austria</option>
<option>Alabama</option>
<option>Jamaica</option>
<option>Taiwan</option>
<option>canada</option>
<option>palau</option>
<option>Wyoming</option>
</select>
我有另一种通用方法(你可以使用值或属性来排序元素),但不使用jQuery:
var select = document.getElementById("mylist");
var options = [];
// Get elements to sort
for (var i in select.childNodes) {
var tagName = select.childNodes[i].tagName;
if (typeof(tagName) != 'undefined' &&
tagName.toLowerCase() == "option") {
/* Field "content" will be used to sort options */
options.push({
node: select.childNodes[i],
content: select.childNodes[i].innerHTML,
});
}
}
// Empty select
while (select.firstChild) {
select.removeChild(select.firstChild);
}
// Sort function
function sort(a, b){
var aa = a.content.toLowerCase();
var bb = b.content.toLowerCase();
if(aa > bb) {
return 1;
} else if (aa < bb) {
return -1;
}
return 0;
}
// Sort array using previous function
options.sort(sort);
// Add the nodes again in order
for (var i in options) {
select.appendChild(options[i].node);
}
<select name="list" id="mylist" style="width:140px;">
<option>United States</option>
<option>Austria</option>
<option>Alabama</option>
<option>Jamaica</option>
<option>Taiwan</option>
<option>canada</option>
<option>palau</option>
<option>Wyoming</option>
</select>
var selectList = $('#mylist option');
function sort(a,b){
a = a.text.toLowerCase();
b = b.text.toLowerCase();
if(a > b) {
return 1;
} else if (a < b) {
return -1;
}
return 0;
}
selectList.sort(sort);
$('#mylist').html(selectList);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js" integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" crossorigin="anonymous"></script>
<select name="list" id="mylist" style="width:140px;">
<option>United States</option>
<option>Austria</option>
<option>Alabama</option>
<option>Jamaica</option>
<option>Taiwan</option>
<option>canada</option>
<option>palau</option>
<option>Wyoming</option>
</select>
感谢@Narendra Sisodia提供jQuery技巧。
祝你好运!
答案 1 :(得分:4)
Select2版本4.0已将sortResults
重命名为sorter
,因此您可以执行以下操作:
$('#input').select2({
sorter: function(data) {
return data.sort();
}
})
答案 2 :(得分:0)
看一下这段代码:
$('#your_select').select2({
/* Sort data using lowercase comparison */
sorter: data => data.sort((a,b) => a.text.toLowerCase() > b.text.toLowerCase() ? 0 : -1)
});
希望对您有所帮助! =)
答案 3 :(得分:0)
这是从github问题中摘录的,所以所有功劳都归功于原始海报,但这对我有用。
版本4.x
$( '#mylist' ).select2({
sorter: function(data) {
return data.sort(function (a, b) {
if (a.text > b.text) {
return 1;
}
if (a.text < b.text) {
return -1;
}
return 0;
});
}
});