2010-12-08 16 views
11

Estoy usando un multiselección con opciones agrupadas.¿Cómo obtener el grupo de selección para un multiselección en 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> 

He intentado $(this).find("option:selected").parent().attr("label") que sólo devuelve el optgroup de la primera opción seleccionada, es decir, si ambos fueron seleccionados fresa y pera, optgroup '.fruit' sería devuelto en ambas cuentas.

Usando jQuery, ¿cómo obtengo el grupo de opción de cada opción seleccionada?

Respuesta

16

probar este

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

intento con .each()

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

Esto puede ser un poco tarde, pero acabo de terminar trabajando en este tema y esto parece ser la solución más elegante que he encontrado :

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

Aquí hay un violín modificado para este ejemplo en particular (Usando el atributo de clase en lugar del atributo label): http://jsfiddle.net/pNjsj/

la esperanza de que ayude a alguien :)

+0

Si vas a tomar un evento y hacer) .Filter e.target $ ((": seleccionado") por alguna razón no funcionará En ese caso, funciona $ (e.target) .find (": selected"). De hecho, find() funciona en ambos casos, por lo que te recomiendo que uses eso en lugar de filter(). – Swader

Cuestiones relacionadas