2010-12-08 7 views
11

J'utilise un multiselect avec des options regroupées.Comment obtenir l'optgroup pour un multiselect dans jQuery?

<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> 

J'ai essayé $(this).find("option:selected").parent().attr("label") qui renvoie l'optgroup de la première option sélectionnée, ce qui signifie, si la fraise et poire ont tous deux été sélectionnés, optgroup « .fruit » serait retourné sur les deux comptes. En utilisant jQuery, comment obtenir le optgroup de chaque option sélectionnée?

Répondre

16

Essayez cette

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

Essayez avec .each()

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

Cela peut être un peu en retard, mais je viens de terminer de travailler sur cette question et cela semble être la solution la plus élégante que j'ai trouvé :

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

Voici un violon modifié pour cet exemple particulier (Utilisation du attribut de classe plutôt que l'attribut label): http://jsfiddle.net/pNjsj/

espoir qui aide une personne :)

+0

Si vous attraper un événement et faire $ (e.target) .filter (« selected ») pour une raison quelconque ne fonctionnera pas. Dans ce cas, $ (e.target) .find (": selected") fonctionne. En fait, find() fonctionne dans les deux cas, donc je vous recommande de l'utiliser à la place de filter(). – Swader

Questions connexes