4

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でソートされていますが、テキストでソートしたいです。

4

1 に答える 1

9

配列内の各オブジェクト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');
});

更新されたフィドル

于 2016-01-14T11:21:21.853 に答える