2011-08-30 132 views
1

我想获得除选定的一个以外的所有选项,并与选定的一个不同的类。jquery获取选择选项兄弟

请看下面的例子:

<select name="country" id="country"> 

    <option value="1" class="option_vat" selected="selected">United Kingdom</option> 
    <option value="2" class="option_no_vat">United States</option> 
    <option value="3" class="option_vat">Spain</option> 
    <option value="4" class="option_vat">Portugal</option> 

</select> 

现在,当变化()事件被称为我想要得到的类所选择的选项,其他选项,这些都是选择一个不同的类别。 在这种情况下,将被添加到数组中的唯一类将是'option_no_vat',因为西班牙和葡萄牙选项在选定的类中具有相同的类(英国)。

有人可能会建议一个解决方案吗?

回答

1

试试这个:

var classes; 

$('#country').change(function() 
{ 
    classes = []; 

    $(this).find('option:not(:selected)') 
     .not('.' + $(this).find(':selected').attr('class')) 
     .each(function() 
     { 
      var class = $(this).attr('class'); 

      if ($.inArray(class, classes) == -1) 
       classes.push(class); 
     }); 
}); 

​​

注:如果你有每个元素只是一个类这只会正常工作。

+0

@ user398341:如果您使用的是Firefox,那么是的。其他浏览器有他们自己的控制台... –

+0

感谢您的约瑟夫 - 伟大的工程 - 我也添加检查类的存在,以及在if()语句,以确保它有类分配。 – user398341

3

http://jsfiddle.net/vKXMP/1/

$("select#country").change(function(){ 
    var $that, cls; 
    $that = $(this); 
    cls = $that.find("option:selected").attr("class"); //returns the class of the selected elements... only works when there is only one class 
    console.log($that.find("option").not("."+cls)) //gives you back a jquery object of all the elements with a different class then the one selected 
}); 

下一次,至少尝试一些东西。

+1

+1。获取选定元素的另一种方法是'this.options [this.selectedIndex]'。 –

+0

@Felix Kling。哦,男孩,我一直忘记我的JS基础知识......谢谢 – meo

+0

我曾尝试 - 但它没有工作 - 因此,这个问题... – user398341

1

在这里你去

工作demo

$(function(){ 
    $("#country").change(function(){ 
     var classes = [], class; 
     var currentClass = $(this).find("option:selected").attr('class'); 
     $(this).find("option").each(function(){ 
      class = $(this).attr('class'); 
      if(class != currentClass){ 
       if($.inArray(class, classes) == -1){ 
        classes.push(class); 
       } 
      } 
     }); 
     alert(classes.join(",")); 
    }).change(); 
}); 

classes数组将包含所有你需要的唯一的类。