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

Javascript 如何对列表中的字段进行排序,但忽略一个选项,javascript,jquery,select,option,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&

我有下面的脚本,它按字母顺序对列表的值进行排序,因为此列表会根据网站的语言进行更改

<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以从排序中排除第一个选项值,但将其保留在顶部。有一点需要考虑的是,这首先是一个值,它应该是这样的,因为我有另一个小脚本强制用户选择任何其他东西来处理表单。 提前多谢

您可以使用:

这将选择匹配集中索引大于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
});)
拨弄

$("#list1").html($("#list1 option").sort(function (a, b) {
    if(!a.value) return;
    return a.text == b.text ? 0 : a.text < b.text ? -1 : 1
    }))
$("#list1 option").not(':first').sort(function(a, b) {
    return a.text > b.text;
}).appendTo('#list1');
$("#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
});)