如何对<select>列表中的字段进行排序,但忽略一个选项</select>

时间:2013-06-03 10:58:10

标签: javascript jquery select option

我有以下脚本按字母顺序对列表的值进行排序,因为此列表会根据网站的语言而变化。

<select style="width:250px" id="list1">
    <option value="">Confederation</option> <!--I would like to keep this at the top-->
    <option value="40934">Africa (CAF)</option>
    <option value="44624">Asia (AFC)</option>
    <option value="29521">Europe (UEFA)</option>
    <option value="43099">North &amp; Central America (CONCACAF)</option>
    <option value="46617">Oceania (OFC)</option>
    <option value="38731">South America (CONMEBOL)</option>
</select>

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

如您所见,在通过脚本后,这是输出:

<select style="width:250px" id="list1">
    <option value="40934">Africa (CAF)</option>
    <option value="44624">Asia (AFC)</option>
    <option value="">Confederation</option> <!-- But it gets sorted also and it ends up in the middle -->
    <option value="29521">Europe (UEFA)</option>
    <option value="43099">North &amp; Central America (CONCACAF)</option>
    <option value="46617">Oceania (OFC)</option>
    <option value="38731">South America (CONMEBOL)</option>
</select>

问题是应该是第一个值的第一个值也被排序,因此它最终位于列表的中间,看起来很尴尬。

我想修改javascript以从排序中排除第一个选项值,但将其保留在顶部。需要考虑的一件事是,它首先具有值“”,它应该是这样的,因为我有另一个小脚本,强制用户选择其他任何东西以处理表单。

提前多多感谢!

4 个答案:

答案 0 :(得分:10)

您可以使用:gt() Selector

执行此操作
$("#list1").append($("#list1 option:gt(0)").sort(function (a, b) {
    return a.text == b.text ? 0 : a.text < b.text ? -1 : 1;
}));

这将选择匹配集中索引大于0的所有选项。

FIDDLE DEMO

答案 1 :(得分:2)

您可以使用not方法:

$("#list1 option").not(':first').sort(function(a, b) {
    return a.text > b.text;
}).appendTo('#list1');

http://jsfiddle.net/jgvfG/

答案 2 :(得分:0)

http://jsfiddle.net/Ljhpb/5/

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

答案 3 :(得分:0)

试试这个,

$("#list1").html(
    $("#list1 option:first")+    
    $("#list1 option:first").nextAll('option').sort(function (a, b) {
        return a.text == b.text ? 0 : a.text < b.text ? -1 : 1
});)

小提琴 http://jsfiddle.net/HKJNb/