2009-03-20 9 views

Trả lời

3

Đặt giá trị tùy chọn và văn bản vào một mảng, sắp xếp mảng, sau đó thay thế các phần tử tùy chọn hiện có bằng các phần tử mới được tạo từ mảng được sắp xếp.

+0

đây là một liên kết tôi tìm thấy trong đó cho thấy làm thế nào để làm điều này: http://www.w3schools.com/jsref/jsref_sort.asp – mrTomahawk

43

Bạn có thể sử dụng jQuery và một cái gì đó như thế này:

$("#id").html($("#id option").sort(function (a, b) { 
    return a.text == b.text ? 0 : a.text < b.text ? -1 : 1 
})) 

Nhưng nó có thể tốt hơn để hỏi tại sao và những gì bạn đang cố gắng để đạt được.

+3

+1 hoàn toàn dựa trên những gì nó sẽ làm mà không cần jQuery (xem câu trả lời dưới đây) . –

+0

Điều này làm việc tuyệt vời cho tôi. Trình đơn thả xuống của tôi được điền khi thay đổi một trình đơn thả xuống khác. Mã này đã làm các trick! Cảm ơn @mastro – shanabus

+0

hoạt động như một giấc mơ ... ngắn gọn ... cảm ơn! –

6
<select id="foo" size="10"> 
    <option value="3">three</option> 
    <option value="1">one</option> 
    <option value="0">zero</option> 
    <option value="2">two</option> 
</select> 
<script> 
    // WARN: won't handle OPTGROUPs! 
    var sel = document.getElementById('foo'); 
    // convert OPTIONs NodeList to an Array 
    // - keep in mind that we're using the original OPTION objects 
    var ary = (function(nl) { 
    var a = []; 
    for (var i = 0, len = nl.length; i < len; i++) 
     a.push(nl.item(i)); 
    return a; 
    })(sel.options); 
    // sort OPTIONs Array 
    ary.sort(function(a,b){ 
    // sort by "value"? (numeric comparison) 
    // NOTE: please remember what ".value" means for OPTION objects 
    return a.value - b.value; 
    // or by "label"? (lexicographic comparison) - case sensitive 
    //return a.text < b.text ? -1 : a.text > b.text ? 1 : 0; 
    // or by "label"? (lexicographic comparison) - case insensitive 
    //var aText = a.text.toLowerCase(); 
    //var bText = b.text.toLowerCase(); 
    //return aText < bText ? -1 : aText > bText ? 1 : 0; 
    }); 
    // remove all OPTIONs from SELECT (don't worry, the original 
    // OPTION objects are still referenced in "ary") ;-) 
    for (var i = 0, len = ary.length; i < len; i++) 
    sel.remove(ary[i].index); 
    // (re)add re-ordered OPTIONs to SELECT 
    for (var i = 0, len = ary.length; i < len; i++) 
    sel.add(ary[i], null); 
</script> 
+0

so sánh giá trị sẽ chỉ hoạt động đối với số học; để phân loại từ vựng, hãy xem phần so sánh trong câu trả lời của masto. – bobince

+2

Xin lỗi, nhưng tôi không hiểu điểm của nhận xét của bạn là gì, vì tôi chắc chắn bạn đã xem MỘT dòng bên dưới so sánh số đó thực hiện chính xác a, đoán cái gì, "so sánh lexicographic" trên tùy chọn '"văn bản" ?! :( – altblue

+0

Sử dụng tốt nhất