2010-12-08 128 views
11

私は複数のオプションをグループ化して使用しています。jQueryで複数選択のoptgroupを取得するにはどうすればよいですか?

<select title="Fruits" multiple="multiple" id="fruits" name="fruits[]"> 
    <option selected="selected" label="All" value="">All</option> 
    <optgroup label="" class="fruit"> 
     <option label="apple" value="1">Apple</option> 
     <option label="pear" value="2">Pear</option> 
     <option label="orange" value="3">Orange</option> 
    </optgroup> 
    <optgroup label="" class="berries"> 
     <option label="strawberry" value="4">Strawberry</option> 
     <option label="raspberry" value="5">Raspberry</option> 
     <option label="blueberry" value="6">Blueberry</option> 
    </optgroup> 
</select> 

私はイチゴと梨の両方が選択された場合は、OPTGROUP「.fruit」の両方のアカウントに返される意味、最初に選択したオプションのOPTGROUPを返す$(this).find("option:selected").parent().attr("label")を試してみました。

jQueryを使用して、選択した各オプションのoptgroupを取得するにはどうすればよいですか?

答えて

16

これは少し遅れる場合がありますが、私はちょうどこの問題に取り組んで終了し、これは私が見つけた最もエレガントな解決策であるように思わ.each()

$(this).find("option:selected").each(function(){ 
    alert($(this).parent().attr("label")); 
}); 
3

をお試しください:

$("#fruits option").filter(":selected").parent("optgroup").attr("label"); 

ここでは、この特定の例のために修正されたフィドルですむしろ、label属性よりもクラス属性):http://jsfiddle.net/pNjsj/

希望に役立ちます誰か:)

4

で試してみてください。この

$(this).find("option:selected").each(function(){ 
    $(this).parent().attr("label"); 
}); 
+0

あなたがイベントをキャッチし、($(e.target).filterをやっている場合は、次のいくつかの理由でそれのために)「を選択し」動作しません。その場合、$(e.target).find( ":selected")が動作します。実際、find()はどちらの場合でも動作するので、filter()の代わりにfind()を使用することをお勧めします。 – Swader

関連する問題