更改各个select2框的选项背景颜色?

时间:2015-09-29 05:34:55

标签: javascript jquery html css

我使用过select2插件。我需要添加新类 .select2-results .select2-highlighted类用于覆盖背景颜色。 任何人都可以告诉我解决方案。

1 个答案:

答案 0 :(得分:1)

您想为不同的select2框颜色设置不同的颜色。 select2实际上使这有点困难,因为生成的html格式及其添加到文档的方式:

From the Docs

  

默认情况下,Select2会将下拉列表附加到正文的末尾,并将其绝对定位到选择容器下方。

     

当下拉列表附加到正文时,您不仅可以显示容器下方的下拉列表。如果容器下方没有足够的空间,则Select2将显示在容器上方,但其上方有足够的空间。您也不仅限于在父容器中显示下拉列表,这意味着Select2将在模态和其他小容器内正确呈现。

这显然有助于select2在模态等方面更好地工作但是因为"父母"元素并不意味着杰克,....即 - 原始选择父母的造型后代不会帮助你。

但是,dropdownParent选项允许您指定应添加生成的html的位置...因此我们可以使用它。

基本思想是为每个选择添加data-select2-container=""属性,其select2对应的颜色应不同。然后代码将创建一个div,其中包含属性中指定的类,并在原始select之后添加它,然后将select2框附加为添加的div的子项,从而允许您将元素设置为具有指定类的div的子项:



$(function () {
     $(".select2").each(function(i,e){
         $this = $(e);
         if($this.data('select2-container')){
         	 // if a container was specified as a data attribute, create that container and add it after the current raw select element
        	 // the value set for `data-select2-container` will be used as the class for the container
             $('<div class="'+$this.data('select2-container')+'"></div').insertAfter($this);
             $this.select2({
      		     placeholder: 'Select an option...',
     		     dropdownParent:$this.next() // set the parent for the generated html to the element we created
    		 });
         } 
         else $this.select2({ placeholder: 'Select an option...'}); // handel cases where a container was not specified 
     });
});
&#13;
.orange .select2-container--default .select2-results__option--highlighted[aria-selected] {
    background-color: orange;
}

.red .select2-container--default .select2-results__option--highlighted[aria-selected] {
    background-color: red;
}

.green .select2-container--default .select2-results__option--highlighted[aria-selected] {
    background-color: green;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link href="https://select2.github.io/dist/css/select2.min.css" rel="stylesheet"/>
<script src="https://select2.github.io/dist/js/select2.full.js"></script>
<div class="container1">
    <select class="select2" data-select2-container="orange">
        <option></option>
        <option value="1">Option 1</option>
        <option value="2">Option 2</option>
        <option value="3">Option 3</option>
        <option value="4">Option 4</option>
        <option value="5">Option 5</option>
    </select><br>
    <div class="container2">
        <select class="select2" data-select2-container="green">
            <option></option>
            <option value="1">Option 1</option>
            <option value="2">Option 2</option>
            <option value="3">Option 3</option>
            <option value="4">Option 4</option>
            <option value="5">Option 5</option>
        </select><br>
        <select class="select2" data-select2-container="red">
            <option></option>
            <option value="1">Option 1</option>
            <option value="2">Option 2</option>
            <option value="3">Option 3</option>
            <option value="4">Option 4</option>
            <option value="5">Option 5</option>
        </select>
    </div>
        
</div>
<br>
&#13;
&#13;
&#13;

重要说明:

  1. 此代码仅在您使用full version of select2 4.0.0and the CSS to go with it
  2. 时才有效
  3. 像这样添加的元素如果处于模态中可能无法正常工作(根据文档中的注释判断,未经测试)
  4. 这是我可能只是下载插件并对其进行编辑以便本机具有此功能的情况之一,我无法想象为什么作者没有包含此选项......