2011-07-12 3 views
17

選択リストでオプションのリストを取得し、アルファベット順で並べ替えて並べ替える機能を探しています。テキスト「NA」のすべての値は、リストの一番下にプッシュされます。javascript/jQueryで選択リストのオプションをソートします。アルファベット順ではありません

だから、リストを与えられた -

<select> 
    <option value="1">Car</option> 
    <option value="2">Bus</option> 
    <option value="3">NA</option> 
    <option value="4">Bike</option> 
    <option value="5">Tractor</option> 
    <option value="6">NA</option> 
</select> 

私たちは、で終わる必要があります -

<select> 
    <option value="4">Bike</option> 
    <option value="2">Bus</option> 
    <option value="1">Car</option> 
    <option value="5">Tractor</option> 
    <option value="3">NA</option> 
    <option value="6">NA</option> 
</select> 

、NASの順序は重要ではありません。

そしてなぜを聞かない私はただのNAを削除することはできません(または、私はどちらかそれに同意しないので、なぜ、同じ文章が異なる根本的な値を持ついくつかのオプションが存在します。

+0

これらすべての回答に注目してください:並べ替えによって、どのオプションが選択されるかが変更されます。並べ替えの前にselect要素の値を保持し、後で復元する必要があります。 –

答えて

45

デモ:http://jsfiddle.net/4bvVz/

function NASort(a, b) {  
    if (a.innerHTML == 'NA') { 
     return 1; 
    } 
    else if (b.innerHTML == 'NA') { 
     return -1; 
    }  
    return (a.innerHTML > b.innerHTML) ? 1 : -1; 
}; 

$('select option').sort(NASort).appendTo('select'); 
+0

最初に投稿されたように答えとしてマークされています。plusにはデモがあります。ブリリアント、ありがとう。 – glosrob

+0

約5分間作業した後で、捨ててしまうことはないようです。 – kei

+0

@glosrob cwolvesが実際に投稿されました – kei

16
var sb = $('select'); 

sb.append(sb.find('option').sort(function(a, b){ 
    return (
     a = $(a).text(), 
     b = $(b).text(), 
     a == 'NA' ? 1 : b == 'NA' ? -1 : 0|a > b 
    ); 
})); 
1

あなたが複数のページで選択します(複数選択)をお持ちの場合は、これを使用します:

function NASort(a, b) { 
    if (a.innerHTML == 'NA') { 
     return 1; 
    } 
    else if (b.innerHTML == 'NA') { 
     return -1; 
    } 
    return (a.innerHTML > b.innerHTML) ? 1 : -1; 
}; 

$('select').each(function(index) { 
    $(this).find('option').sort(NASort).appendTo($(this)); 
}); 
1

元の関数にいくつかの変更を加えましたが、うまくいきました。

function NASort(a, b) { 
    console.log(a.innerHTML.substr(0, 1).toLowerCase() + ' > ' + b.innerHTML.substr(0, 1).toLowerCase()); 
    return (a.innerHTML.substr(0, 1).toLowerCase() > b.innerHTML.substr(0, 1).toLowerCase()) ? 1 : -1; 
}; 

$('select option').sort(NASort).appendTo('select'); 
関連する問題