Mar*_*łek 14 css jquery jquery-select2
我想用缩进创建多级select2选项,但我不想使用optgroup
元素,因为我想允许选择主要类别.如果是select2,有什么方法可以设置样式吗?
我的原始HTML选择如下所示:
<select class="js-select-multiple">
<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>
<script>$(".js-select-multiple").select2({maximumSelectionLength: 5});</script>
Run Code Online (Sandbox Code Playgroud)
所以不使用Select2我可以添加text-indent
属性到.l2
类.但是,似乎Select2
不使用那些用于选项的类,因此设置这些类的样式将不起作用.
那有什么解决方法吗?
Kev*_*own 26
你是否正确认识到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;
}
});
Run Code Online (Sandbox Code Playgroud)
.l2 {
padding-left: 1em;
}
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)
请注意,我也使用padding-left
而不是text-indent
,这是Select2通常用于嵌套选项的.