如何将特定的 class 添加到 select2 drop 元素?

How to add a specific class to select2 drop element?

我通过 css 定制了 select2 及其通用的 classes 和 ID。

现在,我正在尝试自定义将提供给 select2 的特定 class,然后在 css 中应用它。

我的问题:不是说 select 而是它的下降( div 和 class select2-drop ) 附加到正文,我怎样才能访问那个?

我已经试过了:

$(".element").select2({
   minimumResultsForSearch: -1,
   containerCssClass : "error"
  }
);

但是 class error 没有继承到那个 div。

更新: 这是我正在谈论的图形元素(选项区域):

这是检查中的代码,我想在其中添加特定的 class,因此我可以在 CSS:

中使用它

更新:jsfiddle

这取决于您使用的 select2 版本。 html 结构在其中一个版本中发生了变化。

这里是 Fiddle 例子: https://jsfiddle.net/LpjcqbLu/

我刚把 'error' class 放在 select 框里。

.error + .select2-container, 
.error + .select2-container + .select2-container .select2-dropdown {
    border: 3px solid red !important;
}

在早期版本中,下拉列表不靠近 select 框(在 dom 中),因此您必须执行 javascript 解决方案以应用错误 class直接。

您可以使用 dropdownCssClass 将 class 添加到 select2-drop。我阅读了整个插件以了解发生了什么。终于,我找到了那个选项。

 $(".jSelectbox").select2({
     containerCssClass: "error",
     dropdownCssClass: "test"
 });

更新:如果它不起作用,试试这个(方法 2):

$select = $(".jSelectbox").select2({});
$select.data('select2').$container.addClass('error');
$select.data('select2').$dropdown.addClass('test');

$(".jSelectbox").select2({
  containerCssClass: "error",
  dropdownCssClass: "test"
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/3.5.2/select2.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/3.5.2/select2.js"></script>
<select class="jSelectbox">
            <option value="AL">Alabama</option>
            <option value="AK">Alaska</option>
            <option value="AZ">Arizona</option>
            <option value="AR">Arkansas</option>
            <option value="CA">California</option>
            <option value="CO">Colorado</option>
            <option value="CT">Connecticut</option>
            <option value="DE">Delaware</option>
            <option value="FL">Florida</option>
            <option value="GA">Georgia</option>
            <option value="HI">Hawaii</option>                   
            <option value="ID">Idaho</option>
            <option value="IL">Illinois</option>
            <option value="IN">Indiana</option>
            <option value="IA">Iowa</option>
            <option value="KS">Kansas</option>
            <option value="KY">Kentucky</option>
            <option value="LA">Louisiana</option>
            <option value="ME">Maine</option>
            <option value="MD">Maryland</option>
            <option value="MA">Massachusetts</option>
            <option value="MI">Michigan</option>
            <option value="MN">Minnesota</option>
            <option value="MS">Mississippi</option>
            <option value="MO">Missouri</option>
            <option value="MT">Montana</option>
            <option value="NE">Nebraska</option>
            <option value="NV">Nevada</option>
            <option value="NH">New Hampshire</option>
            <option value="NJ">New Jersey</option>
            <option value="NM">New Mexico</option>
            <option value="NY">New York</option>
            <option value="NC" selected="">North Carolina</option>
            <option value="ND">North Dakota</option>
            <option value="OH">Ohio</option>
            <option value="OK">Oklahoma</option>
            <option value="OR">Oregon</option>
            <option value="PA">Pennsylvania</option>
            <option value="RI">Rhode Island</option>
            <option value="SC">South Carolina</option>
            <option value="SD">South Dakota</option>
            <option value="TX">Texas</option>
            <option value="TN">Tennessee</option>
            <option value="UT">Utah</option>
            <option value="VT">Vermont</option>
            <option value="VA">Virginia</option>
            <option value="WA">Washington</option>
            <option value="WV">West Virginia</option>
            <option value="WI">Wisconsin</option>
            <option value="WY">Wyoming</option>
            </select>

Jsfiddle

如果包含 select2.full.js

containerCssClass 有效。完整版有这个选项

可以用另一种方式实现 - 通过 select2 的数据-* -(如果不想添加 select2.full.js)。喜欢它:

 var select2 = $(".element").select2({/* Select2 Opts */});

好的。现在将 var select2 推送到控制台(以便理解),例如:

 console.log($(select2).data('select2'));

你会看到这样的东西:

e {$element: init(1), id: "select2-....", options: e, listeners: Object, dataAdapter: d…}
 $container: init(1)
 $dropdown: init(1) <-- what you need!
 $element: init(1)
 $results: init(1)
 ....

好的,现在只需将指定的 class(-es) 添加到 select2's dropdown 中即可:

select2.data('select2').$dropdown.addClass("...");

此外,通过 $(select2).data('select2') 您可以访问其他 select2 元素(容器等)。

$(".select").select2({
  selectionCssClass: "my-class-section",
  dropdownCssClass: "my-class-drop"
});

这是最简单的添加方式 class

$(".kt_select2").on('select2:open', function (e) {
    $('body').find('span.select2-dropdown--below').addClass('kt_select_pro');
    $('body').find('ul.select2-results__options').addClass('kt_select_pro');
});