2009-03-20 22 views

答えて

3

オプションの値とテキストを配列に格納し、配列をソートしてから、既存のオプション要素をソートされた配列から構築された新しい要素に置き換えます。

+0

ここに、これを行う方法を示したリンクがあります。 http://www.w3schools.com/jsref/jsref_sort.asp – mrTomahawk

43

あなたはjQueryのを使用して、このようなものでした:

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

しかし、それはなぜ、何を達成しようとしているに依頼することはおそらく良いでしょう。

+3

+1は、jQueryなしで何をするにしても純粋に基づいています(下記の回答を参照) 。 –

+0

これは私のためにうまくいった。私のドロップダウンは、別のドロップダウンの変更時に設定されます。このコードはトリックでした!ありがとう@mastro – shanabus

+0

は、夢のように動作します...簡潔に...ありがとう! –

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

。値の比較は数値に対してのみ有効です。辞書検索のソートのために、mastoの答えにコンパレータが表示されます。 – bobince

+2

申し訳ありませんが、あなたのコメントのポイントは何か分かりません。オプションの「テキスト」の「字句比較」を正確に行う数値比較の下に1行だけ表示されていると思います。 : – altblue

+0