【问题标题】:How to add a specific class to select2 drop element?如何将特定类添加到 select2 放置元素?
【发布时间】: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 因为我有多种样式供多种用途。

标签: javascript jquery css jquery-select2


【解决方案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"
    });
    

    【讨论】:

      猜你喜欢
      • 2013-02-08
      • 1970-01-01
      • 1970-01-01
      • 2021-06-15
      • 2023-03-16
      • 2023-03-15
      • 2018-11-23
      • 1970-01-01
      • 2015-08-27
      相关资源
      最近更新 更多