选择2,将标签显示到另一个DIV中

我想将select2表单中的标签显示到另一个DIV中。 我尝试了TJ Nicolaides提出的解决方案https://stackoverflow.com/a/34140018/3030970但是当你删除一个标签然后再添加它时,它不能用于jQuery> 3,你不能再删除它

$(".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 = $('
    '); $selected.each(function(k, v) { var $li = $('
  • ×' + $(v).text() + '
  • '); $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); }); $container.html('').append($list); }).trigger('change');

TJ Nicolaides提出的小提琴: http : //jsfiddle.net/tjnicolaides/ybneqdqa/

问题与data()方法有关吗?

谢谢你的帮助:)

我终于找到了一个解决方案,它与data()方法无关,而是与用于将所选值设置为false的attr()方法相关。

我只需用prop()方法替换attr() ,更适合这种情况。

 $(".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 = $('
    '); $selected.each(function(k, v) { var $li = $('
  • ×' + $(v).text() + '
  • '); $li.children('a.destroy-tag-selected') .off('click.select2-copy') .on('click.select2-copy', function(e) { var $opt = $(this).data('select2-opt'); $opt.prop('selected', false); // <-- Main difference $opt.parents('select').trigger('change'); }).data('select2-opt', $(v)); $list.append($li); }); $container.html('').append($list); }).trigger('change');