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 & 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 & 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
});)