javascript - 在 Select2 中按名称排序

标签 javascript jquery jquery-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: data => data.sort((a, b) => a.text < b.text ? -1 : a.text > b.text ? 1 : 0);

// legacy version, for IE support:
sorter: function(data) {
    return data.sort(function(a, b) {
        return a.text < b.text ? -1 : a.text > b.text ? 1 : 0;
    });
}

要对选定的选项进行排序,您需要在选择一个选项时在标签上实现类似的逻辑,如下所示:

const dataUser = [{ "id": "5", "text": "BTest" }, { "id": "2", "text": "ATest" }, { "id": "8", "text": "CTest" }, { "id": "13", "text": "DTest" }];
const sortHandler = (a, b) => $(a).text() < $(b).text() ? -1 : $(a).text() > $(b).text() ? 1 : 0;

$("#mylist").select2({
  data: dataUser,
  templateResult: data => data.text,
  sorter: data => data.sort(sortHandler)
}).on("select2:select", () => {
  $('.select2-selection__rendered li.select2-selection__choice').sort(sortHandler).prependTo('.select2-selection__rendered');
});
select {
  width: 140px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.3/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.1/js/select2.full.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.1/css/select2.min.css" />
<select name="list" id="mylist" multiple></select>

关于javascript - 在 Select2 中按名称排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34788259/

相关文章:

javascript - RegExp - 替换搜索中的 `html` 标签并突出显示

jquery - 将 jquery ajax 调用获取到数组中

symfony - 扩展 EntityType 以允许通过 AJAX 调用设置额外的选择

javascript - 使用 select2 中选定的选项隐藏组件

javascript - 无法让我的单词随机生成器脚本正确循环

javascript - 如何使用javascript刷新弹出窗口

javascript - 使用 Javascript 创建表

javascript - 使用 jquery append 添加 svg 元素

jquery - 为什么在没有寻呼机的情况下选择最后一行不起作用?

javascript - 未捕获的类型错误 : Cannot read property 'replace' of null in select2