jQuery根据选择框选项添加css类

时间:2012-06-26 13:09:37

标签: jquery css class element drop-down-menu

我有3个下拉列表,我想根据下拉列表的值为特定div添加一个类。

<select name="item1">
    <option>Blue</option>
    <option>Green</option>
    <option>Red</option>
</select>

<select name="item2">
    <option>Blue</option>
    <option>Green</option>
    <option>Red</option>
</select>

<select name="item3">
    <option>Blue</option>
    <option>Green</option>
    <option>Red</option>
</select>

<div class="product">
    <div class="item1"></div>
    <div class="item2"></div>
    <div class="item3"></div>
</div>

我正在尝试根据下拉列表的值添加css类。 例如,如果选择了下拉列表 item1 中的选项蓝色,我想在div 中添加一个 .blue 类ITEM1

我以前有复选框而不是下拉列表,我有这个代码:

$(document).ready(function($){
    $('input#red').change(function(){
        if($(this).is(":checked")) {
            $('div.item1').addClass("red");
        } else {
            $('div.item1').removeClass("red");
        }
    });
    $('input#blue').change(function(){
        if($(this).is(":checked")) {
            $('div.item1').addClass("blue");
        } else {
            $('div.item1').removeClass("blue");
        }
    });
});

我创建了这个:http://jsfiddle.net/uJcB7/14/ 应该如何正确地完成?

------------ ----------- EDIT

我正在使用重力表来生成选择框,并且他们在选项名称后添加“| 0”(我不知道为什么!)。

例如“green | 0”而不是“green”。 “| 0”隐藏在字段中,但生成的类是“绿色| 0”。

有关如何在css类中删除“| 0”的想法吗?

他们还为selectbox生成一个名称,是否可以使用类而不是使用name元素?

查看更新后的代码:

http://jsfiddle.net/uJcB7/24/

6 个答案:

答案 0 :(得分:2)

要添加类的<div>的类与要更改的name元素的<select>属性相同,要添加的类的名称是较低的选择的选项的值的案例版本。考虑到这一点,这有效:

$(document).ready(function($){
    $('select').change(function(){
        $('.' + this.name).attr('class', this.name + ' ' + this.value.toLowerCase());
    });
});

jsFiddle DEMO

答案 1 :(得分:1)

这是一个通用函数,它将所选选项的文本值添加到适当的div:

$(document).ready(function($){

  $('select').change(function(){
    var s = $(this);
    var name = s.attr('name');
     $('.'+name).removeClass().addClass(name+' '+s.find(':selected').text().toLowerCase());
  });
});​

演示:http://jsfiddle.net/jackwanders/xcEa9/4/

更一般地说,您可以使用$ .map来获取选择菜单值的列表,以便您知道要在每个更改事件中删除哪些类名称:

$('select').change(function(){
    var $this = $(this);
    var values = $.map($this.find('option'),function(opt){ return opt.value.toLowerCase(); }).join(' ');
    $('.'+this.name).removeClass(values).addClass($(this).val().toLowerCase());
});

演示:http://jsfiddle.net/jackwanders/xcEa9/5/

答案 2 :(得分:0)

$(document).ready(function() {

  $('#item1').change(function() {
    $('.item1').addClass($('#item1').val());
  });

  $('#item2').change(function() {
    $('.item2').addClass($('#item2').val());
  });

  $('#item3').change(function() {
    $('.item3').addClass($('#item3').val());
  });

});

如果您愿意,也可以将各个片段保留在for循环中。

答案 3 :(得分:0)

这个适用于所有select元素。

jsFiddle demo

$('select[name^=item]').change(function(){
    var val = $(this).val();
    $('div.'+$(this).attr('name')).removeClass('red blue green').addClass(val);
});

select[name^=item]搜索名称以item

开头的select元素

答案 4 :(得分:0)

$(function() {
  $('select').bind('change', function() {
    var $this = $(this);
    $this.find('option:not(:selected)').each(function(index, option) {
      $this.removeClass($(option).text());
    });
    $this.addClass($this.find('option:selected').text());
  });        
});

Updated JSFiddle

答案 5 :(得分:0)

这将清除类中先前设置的颜色值(如果有)并设置新颜色值。

$(document).ready(function($){
    $('select').change(function(){
        name = $(this).attr('name');
        curClass = $('div.'+name).attr('class');
        $('div.'+name).removeClass(curClass).addClass(name + ' ' +$(this).val());
    });
});

Fiddle Here