2011-08-30 129 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數組將包含所有你需要的唯一的類。