数週間前にこの質問に出くわし、他の回答が必要とする Select2 のスタイル変更よりもリスクが少ないと感じた代替ソリューションを共有したいと思いました。
change
私たちのチームが最終的に使用したのは、基になる要素のイベントをリッスンして<select>
、兄弟要素でスタイル付きの順序なしリストを構築/再構築するスクリプトでした。
$(".js-example-tags").select2({
tags: true
}).on('change', function() {
var $selected = $(this).find('option:selected');
var $container = $(this).siblings('.js-example-tags-container');
var $list = $('<ul>');
$selected.each(function(k, v) {
var $li = $('<li class="tag-selected"><a class="destroy-tag-selected">×</a>' + $(v).text() + '</li>');
$list.append($li);
});
$container.html('').append($list);
}).trigger('change');
そして、新しいリストに select2 タグの外観に加えて機能を与えるために、click
イベントをリッスンし、各リスト項目を対応するものとペアにしてoption
、<select>
選択状態を切り替えてchange
イベントを再度トリガーできるようにしました。
$selected.each(function(k, v) {
var $li = $('<li class="tag-selected"><a class="destroy-tag-selected">×</a>' + $(v).text() + '</li>');
$li.children('a.destroy-tag-selected')
.off('click.select2-copy')
.on('click.select2-copy', function(e) {
var $opt = $(this).data('select2-opt');
$opt.attr('selected', false);
$opt.parents('select').trigger('change');
}).data('select2-opt', $(v));
$list.append($li);
});
この後、要素display: none
を非表示にするために使用する問題でした。.select2-selection__choice
jQuery バージョン > 3 では、属性の代わりにプロパティを設定することに注意してください$opt.prop('selected', false)
。それ以外の場合、作成されたタグは削除されません。
完全な例は、http: //jsfiddle.net/tjnicolaides/ybneqdqa/で確認できます。これが誰かの役に立てば幸いです。