1

最初のオプションをソートせずに、ページ上のすべての選択をソートしようとしています。いくつかの値を変更しようとしましたが、そのうちの 1 つだけをソートすることになります。これは現在機能していますが、各選択の最初のオプションを無視していません:

HTML:

<select name="numero_uno" id="numero_uno">
                    <option>Select</option>
                    <option>Mops</option>
                    <option>Brooms</option>
                    <option>X-wings</option>
                </select>

<select name="number_two" id="number_two">
                <option>Select</option>
                    <option>Cabbage</option>
                    <option>Alfalfa</option>
                    <option>Beets</option>
                </select>

Javascript:

function sortSelect(e){
    var oA,i,o;oA=[];
    for(i=0;i<e.options.length;i++){
        o=e.options[i];
        oA[i]=new Option(o.text,o.value,o.defaultSelected,o.selected);
    }
    oA.sort(function(a,b){
        var la=a.text.toLowerCase(),lb=b.text.toLowerCase();
        if(la>lb){
            return 1;
        }
        if(la<lb ){
            return-1;
        }
        return 0;
     });
     e.options.length=0;
     for(i=0;i<oA.length;i++){
        e.options[i]=oA[i];oA[i]=null;
     }
     return true;
 }
var eA=document.getElementsByTagName('select');
for(var i=0;i<eA.length;i++){
    sortSelect(eA[i]);
}

jQuery を使用するいくつかのソリューションを見てきましたが、javascript だけでこれを行いたいと考えています。

jsfiddle: http://jsfiddle.net/cfX8E/

4

2 に答える 2

1

ループを 2 番目のオプションから開始するように変更することはできませんか?

function sortSelect(e){
    var oA,i,o;oA=[];
    for(i=1;i<e.options.length;i++){
        o=e.options[i];
        oA[i-1]=new Option(o.text,o.value,o.defaultSelected,o.selected);
    }
    oA.sort(function(a,b){
        var la=a.text.toLowerCase(),lb=b.text.toLowerCase();
        if(la>lb){
            return 1;
        }
        if(la<lb ){
            return-1;
        }
        return 0;
     });
     e.options.length=1;
     for(i=0;i<oA.length;i++){
        e.options[i+1]=oA[i];oA[i]=null;
     }
     return true;
 }
var eA=document.getElementsByTagName('select');
for(var i=0;i<eA.length;i++){
    sortSelect(eA[i]);
}
于 2013-06-28T18:51:23.473 に答える
-1

最初のオプションを追加しないでください。最初に選択リストをソートしてから、最初のオプションを一番上に追加します。

于 2013-06-28T18:51:16.487 に答える