使用javascript / jQuery对选择列表中的选项进行排序..但不是按字母顺序排序

时间:2011-07-12 19:38:35

标签: javascript jquery select

我正在寻找一个函数,它将在选择列表中选择一个选项列表,并按字母顺序对它们进行排序。所有带有“NA”文本的值都应该被推到列表的底部。

所以给出一个清单 -

<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>

NA的顺序并不重要。

并且不要问为什么我不能只删除NAs(或者为什么会有几个选项使用相同的文本但不同的基础值,因为我也不同意。< / p>

4 个答案:

答案 0 :(得分: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');

答案 1 :(得分: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
    );
}));

答案 2 :(得分: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));
});

答案 3 :(得分: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');