2012-05-18 5 views
2

Je le balisage suivant: -JQuery optgroup trier en ordre alphabétique

<select name="List1" id="l1"> 
<option>One</option> 
<option>Two</option> 
<option>Three</option> 
<option>Bob</option> 
<option>Four</option> 
<option>Five</option> 
<option>Alyn</option> 
</select> 

Et le jquery suivant: -

$('#l1 option:nth-child(n+5)').wrapAll('<optgroup label="Group 1">'); 

qui se traduit par quatre Cinq et Alyn apparaissant dans un optgroup appelé Groupe 1.

Je souhaite trier les résultats par ordre alphabétique, mais après l'application du groupe d'opt. Donc, les quatre premiers résultats doivent être triés par ordre alphabétique et les trois derniers résultats dans le groupe opt doivent être triés par ordre alphabétique.

+1

+1 problème intéressant –

Répondre

2

http://jsfiddle.net/xGENn/16/

$('#sort').click(function() { 

    var $options = $('#l1 option:nth-child(n+5)'); 
    $options.sort(function(a, b) { 
     return $(a).text().localeCompare($(b).text()); 
    }); 
    $options.wrapAll('<optgroup label="Group 1">'); 

    $options = $('#l1').children('option'); 
    $options.sort(function(a, b) { 
     return $(a).text().localeCompare($(b).text()); 
    }); 
    $('#l1').prepend($options).val($("#l1 option:first").val()); 
}); 

​ 
+0

Works, mais seulement pour les optgroup. Il doit trier les options en dehors de l'optgroup aussi! –

+2

@generalexception vous pouvez appliquer la même logique à '$ ('# li select'). Children ('option')' après l'application de 'optgroup', laissez cela comme un exercice pour vous :) –

+0

should' $ options = $ ('# li select'). children ('option'); 'soit' # l1' et non '# li' ?? –

Questions connexes