2015-10-25 75 views
0

我使用select2.js库下面的代码,我想有从选项标签的所有类的选择2列表,像<li class="active select2-selection__choice" title="AA"><span ...获取类slect2.js标签

<select id="example" multiple="multiple" style="width:100%"> 
<option value="AA" class="active" selected>AA</option> 
<option value="BB" class="stanby" selected>BB</option> 
<option value="CC"class="active" selected>CC</option> 

$("#example").select2(); 

Here是合作的小提琴。

enter image description here

回答

1

这可以通过提供一个自定义的选项selectionAdapter来实现。我根据MultipleSelection的Select2实现创建了一个。

// create our custom selection adapter by extending the select2 default one 
$.fn.select2.amd.define('select2-ClassPreservingMultipleSelection',[ 
    'jquery', 
    'select2/selection/multiple', 
    'select2/utils' 
], function ($, MultipleSelection, Utils) { 
    function ClassPreservingMultipleSelection ($element, options) { 
     ClassPreservingMultipleSelection.__super__.constructor.apply(this, arguments); 
    } 

    Utils.Extend(ClassPreservingMultipleSelection, MultipleSelection); 

    // this function was changed to propagate the `selection` argument 
    ClassPreservingMultipleSelection.prototype.selectionContainer = function (selection) { 
     var $baseContainer = ClassPreservingMultipleSelection.__super__.selectionContainer.apply(this, arguments); 

     // this line is what actually adds your CSS-classes 
     return $baseContainer.addClass(selection.element.className); 
    }; 

    // this is a copy-paste of the base method with only one line changed 
    ClassPreservingMultipleSelection.prototype.update = function (data) { 
     this.clear(); 

     if (data.length === 0) { 
      return; 
     } 

     var $selections = []; 

     for (var d = 0; d < data.length; d++) { 
      var selection = data[d]; 

      // This is the only changed line in this method - we added the 'selection' propagation 
      var $selection = this.selectionContainer(selection); 
      var formatted = this.display(selection, $selection); 

      $selection.append(formatted); 
      $selection.prop('title', selection.title || selection.text); 

      $selection.data('data', selection); 

      $selections.push($selection); 
     } 

     var $rendered = this.$selection.find('.select2-selection__rendered'); 

     Utils.appendMany($rendered, $selections); 
     console.log($rendered.html()); 
    }; 

    return ClassPreservingMultipleSelection; 
}); 

$("#example").select2({ 
    selectionAdapter: $.fn.select2.amd.require('select2-ClassPreservingMultipleSelection') 
}); 

这是您的updated JsFiddle

+0

很多工作对于这样一个小事情,但这正是我想要实现的,非常感谢@Dhahariel –