如何将特定类添加到 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 放置元素?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 v4.0 中向 select2 元素添加类

django输入元素错误css类

如何将唯一 ID 添加到 select2 下拉列表

如何将类添加到特定的 html 元素,如果它们包含某个值

将 select2 添加到动态添加的元素

仅当子容器具有内容时,如何将类添加到特定的父元素