我有以下脚本按字母顺序对列表的值进行排序,因为此列表会根据网站的语言而变化。
<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 :(得分: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
的所有选项。
答案 1 :(得分:2)
您可以使用not
方法:
$("#list1 option").not(':first').sort(function(a, b) {
return a.text > b.text;
}).appendTo('#list1');
答案 2 :(得分:0)
$("#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
});)