2012-05-18 70 views
2

我有以下标记: -JQuery的OPTGROUP字母排序

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

而下面的jQuery: -

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

得到四个五和Alyn出现在所谓的第1组

的OPTGROUP

我希望按字母顺序对结果进行排序,但在应用optgroup之后。

所以前四个结果应按字母顺序排序,optgroup中的最后3个结果应按字母顺序排序。

+1

+1有趣的问题 –

回答

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

作品,但只适用于OPTGROUP。它需要对optgroup外部的选项进行排序! –

+2

@generalexception你可以在应用'optgroup'之后将相同的逻辑应用于'$('#li select')。children('option')',将其作为练习:) –

+0

应该'$ options = $('#li select')。children('option');'是'#l1'而不是'#li'? –