如何将特定类添加到 select2 放置元素?
Posted
技术标签:
【中文标题】如何将特定类添加到 select2 放置元素?【英文标题】:How to add a specific class to select2 drop element? 【发布时间】:2016-02-15 00:31:00 【问题描述】:我通过 css 自定义了 select2 及其通用类和 ID。
现在,我正在尝试自定义将提供给 select2 的特定类,然后在 css 中应用它。
我的问题:不是每个人说的选择,而是附加到正文的删除它(带有 select2-drop 类的 div),怎么能我访问那个?
我已经试过了:
$(".element").select2(
minimumResultsForSearch: -1,
containerCssClass : "error"
);
但 error
类没有继承到该 div。
更新: 这是我正在谈论的图形元素(选项区域):
这是被检查的代码,我想在其中添加特定的类,所以我可以在 CSS 中使用它:
更新:jsfiddle
【问题讨论】:
请提供演示。 @alirezasafian 我不知道你想要什么样的演示来解决这样的问题,我想要一个将在 select2 中提供的类,或者在select2-dropdown
中提供的 select 标签中提供我可以更改 CSS 颜色和内容,但仅限于该类。
您可以使用jsfiddle 进行演示。更容易快速解决您的问题。
@alirezasafian jsfiddle.net/wcu23e7m/1
@alirezasafian 因为我有多种样式供多种用途。
【参考方案1】:
您可以使用dropdownCssClass
将类添加到select2-drop
。我阅读了整个插件以了解发生了什么。最后,我找到了那个选项。
$(".jSelectbox").select2(
containerCssClass: "error",
dropdownCssClass: "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
【讨论】:
@Jimmy 这能解决你的问题吗? 这正是我想要的 :) 花了一段时间才得到这个答案......感谢您的帮助! @Jimmy 不客气。顺便说一句,你可以使用这个选择器.error + .select2-drop
。祝你好运。【参考方案2】:
containerCssClass
在包含select2.full.js
时有效。完整版有这个选项
【讨论】:
所有解决方案都不起作用????我将我的 select2 更改为 select2 full 仍然没有用 Select2官网没有提到这个选项。【参考方案3】:这取决于您使用的 select2 版本。 html 结构在其中一个版本中发生了变化。
这里是小提琴的例子: https://jsfiddle.net/LpjcqbLu/
我只是将“错误”类放在选择框上。
.error + .select2-container,
.error + .select2-container + .select2-container .select2-dropdown
border: 3px solid red !important;
在早期版本中,下拉菜单不靠近选择框(在 dom 中),因此您必须执行 javascript 解决方案才能直接应用错误类。
【讨论】:
我需要 3.5.4 版本的解决方案,即使只有 JS 才有可能 那么我建议你在 Fiddle 中放一个指向该版本的链接,因为不是每个人都会有一个副本。【参考方案4】:可以通过另一种方式实现 - 通过 select2
的 data-* - (如果不想添加 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)
....
好的,现在只需以相同的方式将指定的类(-es)添加到select2's dropdown
:
select2.data('select2').$dropdown.addClass("...");
此外,通过$(select2).data('select2')
,您可以访问其他 select2 元素(容器等)。
【讨论】:
这种方法有效,但仅适用于每次选择。所以你需要通过你的选择each(function()
,然后调用select2.data('select2').$dropdown.addClass("...");
。【参考方案5】:
这是添加类的最简单方法
$(".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');
);
【讨论】:
【参考方案6】:$(".select").select2(
selectionCssClass: "my-class-section",
dropdownCssClass: "my-class-drop"
);
【讨论】:
以上是关于如何将特定类添加到 select2 放置元素?的主要内容,如果未能解决你的问题,请参考以下文章