Ответ 1
Вы правильно поняли, что Select2 не переносит классы CSS из тегов <option>
в список результатов. В основном это связано с тем, что явно не привязывает список результатов к существующим тегам <option>
, а также имеет набор разумных значений по умолчанию. Легче добавить возможность переноса классов позже, чем удалить их.
Вы можете сделать это, переопределив templateResult
и получив исходную опцию из data.element
(где data
- это первый параметр).
$('.select2').select2({
templateResult: function (data) {
// We only really care if there is an element to pull classes from
if (!data.element) {
return data.text;
}
var $element = $(data.element);
var $wrapper = $('<span></span>');
$wrapper.addClass($element[0].className);
$wrapper.text(data.text);
return $wrapper;
}
});
.l2 {
padding-left: 1em;
}
<link href="//cdnjs.cloudflare.com/ajax/libs/select2/4.0.0/css/select2.css" rel="stylesheet"/>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/select2/4.0.0/js/select2.js"></script>
<select class="select2" style="width: 200px">
<option class="l1">Option 1</option>
<option class="l2">Suboption 1</option>
<option class="l2">Suboption 2</option>
<option class="l2">Suboption 3</option>
<option class="l1">Option 2</option>
</select>