2010-12-08 10 views
11

Birlikte gruplandırılmış seçeneklere sahip bir multiselect kullanıyorum.jQuery'de multiselect için optgroup nasıl edinilir?

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

Sadece Çilek ve Armut hem seçilmiş olsaydı, OPTGROUP '.fruit' hem hesaplarında iade edileceği anlamına birinci seçilen seçeneğin OPTGROUP döndüren $(this).find("option:selected").parent().attr("label") denedim.

jQuery'yi kullanarak, seçilen her seçeneğin optgroup'unu nasıl alabilirim?

cevap

16

bu

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

Bu biraz geç olabilir .each()

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

ile deneyin deneyin, ama sadece bu konuda çalışan bitmiş ve bu gördüğüm en zarif çözüm gibi görünüyor :

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

Bu özel örnek için değiştirilmiş bir kemandır. yerine etiket özelliği daha class özelliğinin): http://jsfiddle.net/pNjsj/

Umut yardımcı olur birileri :)

+0

Bir etkinlik yakalamak ve ($ (e.target) .filter yapıyorsanız: nedense onun için) "seçili" işe yaramayacak. Bu durumda, $ (e.target) .find (": selected") çalışır. Aslında, find() her iki durumda da çalışır, bu yüzden onu filter() yerine kullanmanızı öneririm. – Swader

İlgili konular