【问题标题】:Adding custom tags style in Select2 MultiSelect Dropdown在 Select2 MultiSelect Dropdown 中添加自定义标签样式
【发布时间】:2017-04-25 10:10:08
【问题描述】:

所以我正在使用 Select2 4 库 (https://select2.github.io/),但我遇到了问题。

<select id="test" multiple style="width:800px;">
    <option value="a">aaaaa</option>
    <option value="b">bbbbb</option>
    <option value="c">cccc</option>
    <option value="d">ddddd</option>
</select>

(...)

$("#test").select2({
   tags: true,
   tokenSeparators: [',', ' ']
})

这是在做出一些选择后生成的DOM元素,其中包含一些&lt;li&gt;s

所以 - 它工作正常。但是我需要在更改后将我的类添加到那些&lt;li&gt; 元素中。我不知道该怎么做,因为 Select2 在添加后会立即重写我的类。

我尝试过这样的事情:

selectEl.change(function() {
  var elements = $('.select2-selection > ul > li');
  elements.each(function() {
    $(this).addClass('my-test-class');
  });
});

但没有任何变化(除了最后一个元素,它是一个输入)。我的意思是 - 我认为它有效,但 Select2 立即重写了它。

我尝试过使用 change、select2:select 侦听器来实现,但这些都不能正常工作。

这个想法是 - 将“select2-auto”添加到从下拉列表中选择的&lt;li&gt;s,并将“select-manual”类添加到其他类。

【问题讨论】:

    标签: javascript jquery jquery-select2


    【解决方案1】:

    您可以使用templateSelection: 自定义标签样式,请在下面找到 sn-p 供您参考..

    templateSelection: function(selection) {
            if(selection.selected) {
                return $.parseHTML('<span class="customclass">' + selection.text + '</span>');
            }
            else {
                return $.parseHTML('<span class="customclass">' + selection.text + '</span>');
            }
        }
    

    $("#test").select2({
       tags: true,
       allowClear: true, //
       closeOnSelect: false,
       tokenSeparators: [',', ' '],
       templateSelection: function(selection) {
            if(selection.selected) {
                return $.parseHTML('<span class="customclass">' + selection.text + '</span>');
            }
            else {
                return $.parseHTML('<span class="customclass">' + selection.text + '</span>');
            }
        }
    
    });
    
    $("#test").on("select2:select", function(e) { 
    $("li[aria-selected='true']").addClass("customclass");
    $("li[aria-selected='false']").removeClass("customclass");
    $('.select2-search-choice:not(.my-custom-css)', this).addClass('my-custom-css');
    });
    
    $("#test").on("select2:unselect", function(e) { 
    $("li[aria-selected='false']").removeClass("customclass");
    });
    .selectRow {
        display : block;
        padding : 20px;
    }
    .select2-container {
        width: 200px;
    }
    
    .customclass
    {
      color:red;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/select2.min.js"></script>
    <link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/css/select2.min.css" rel="stylesheet"/>
    <select id="test" multiple style="width:800px;">
        <option value="a">aaaaa</option>
        <option value="b">bbbbb</option>
        <option value="c">cccc</option>
        <option value="d">ddddd</option>
    </select>

    【讨论】:

      【解决方案2】:

      dropdownCssClass 属性用于向 select2 下拉菜单添加类。像这样的,

      $("#test").select2({
           tags: true,
           tokenSeparators: [',', ' '],
           containerCssClass: "my-test-class",
           dropdownCssClass: "test-class"
       });
      

      我希望这对你有用。谢谢。

      【讨论】:

      • 我认为 dropdownCssClass 将类添加到 select2 的下拉容器未选中 li 不是吗?
      • @Curiousdev 在select2.full.min.js中仍然可用
      • jquery-3.1.1.min.js?ver=v1.9.1.1.25:2 未捕获错误:没有 select2/compat/dropdownCss selectEl.select2({ tags: true, tokenSeparators: [' ' ], containerCssClass: "my-test-class", dropdownCssClass: "test-class" });
      • @alanmcknee 在tokenSeparators: [',', ' '] 后面加一个逗号,
      • @Curiousdev 它在那里
      【解决方案3】:

      $("#test").select2({
         tags: true,
         allowClear: true, //
         closeOnSelect: false,
         tokenSeparators: [',', ' ']
      });
      
      $("#test").on({
        "select2:select": function(e) { 
            $("li[aria-selected='true']").addClass("customclass");
            $("li[aria-selected='false']").removeClass("customclass");
          },
          "select2:opening": function(e) { 
              setTimeout(function(){
                $("li[aria-selected='true']").addClass("customclass");
                $("li[aria-selected='false']").removeClass("customclass");
              },0)
          },
          "select2:unselect" : function(e) { 
              $("li[aria-selected='false']").removeClass("customclass");
          }
      });
      .selectRow {
            display : block;
            padding : 20px;
        }
        .select2-container {
            width: 200px;
        }
      
        .customclass
        {
          color:red;
        }
      <link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/css/select2.min.css" rel="stylesheet"/>
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
      <script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/select2.full.min.js"></script>
      
      
      <select id="test" multiple style="width:800px;">
          <option value="a">aaaaa</option>
          <option value="b">bbbbb</option>
          <option value="c">cccc</option>
          <option value="d">ddddd</option>
      </select>

      【讨论】:

      • Nope ;) 我需要向 li.select2-selection__choice 添加类。不过谢谢
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-17
      • 2018-03-20
      • 2017-10-12
      • 1970-01-01
      • 2021-02-25
      • 1970-01-01
      相关资源
      最近更新 更多