2009-03-20 15 views

Antwort

3

Setzen Sie die Optionswerte und den Text in ein Array, sortieren Sie das Array und ersetzen Sie die vorhandenen Optionselemente durch neue Elemente, die aus dem sortierten Array erstellt wurden.

+0

Hier ist ein Link, den ich gefunden habe, der zeigt, wie man das macht: http://www.w3schools.com/jsref/jsref_sort.asp – mrTomahawk

43

Sie könnten jQuery und so etwas wie folgt verwenden:

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

Aber es ist wahrscheinlich besser zu fragen, warum und was Sie erreichen wollen.

+3

+1 basierend rein auf was es ohne jQuery gehen würde (siehe Antwort unten) . –

+0

Das hat super für mich funktioniert. Mein Drop-down wird bei Änderung eines anderen Dropdown-Menüs ausgefüllt. Dieser Code hat es geschafft! Danke @mastro – shanabus

+0

funktioniert wie ein Traum ... prägnant ... danke! –

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

.Wertvergleich wird nur für numerische Werte funktionieren; zur lexikographischen Sortierung siehe den Komparator in mastos Antwort. – bobince

+2

Entschuldigung, aber ich verstehe nicht, was der Punkt Ihres Kommentars ist, wie Sie sicher eine Zeile unter diesem numerischen Vergleich, der genau ein, rate was "lexikographischer Vergleich" auf Optionen "Text" ?! :( – altblue

+0

Nice Verwendung von