jQuery排序<select>项目名称

jQuery sorting <select> items by name

本文关键字:项目 select jQuery 排序      更新时间:2023-09-26

我有这个函数:

$('select[name=items]').each( function() {
    $(this).html( $(this).find('option').sort(function(a, b) {
        return a.text == b.text ? 0 : a.text < b.text ? -1 : 1
    }) );
});
<select name="items">
<option value="0">Please select</option>
<option value="1">XXX</option>
<option value="2">BBB</option>
<option value="3">RRR</option>
<option value="4">AAA</option>

如何在不改变0值位置的情况下进行排序?

您可以使用 :gt() 来避免第一个元素

$('select[name=items]').each(function() {
  $(this).find('option:gt(0)').sort(function(a, b) {
    return a.text == b.text ? 0 : a.text < b.text ? -1 : 1
  }).appendTo(this);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<select name="items">
  <option value="0">Please select</option>
  <option value="1">XXX</option>
  <option value="2">BBB</option>
  <option value="3">RRR</option>
  <option value="4">AAA</option>
</select>

或借助属性等于选择器 :not()

$('select[name=items]').each(function() {
  $(this).find('option:not([value=0])').sort(function(a, b) {
    return a.text == b.text ? 0 : a.text < b.text ? -1 : 1
  }).appendTo(this);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<select name="items">
  <option value="0">Please select</option>
  <option value="1">XXX</option>
  <option value="2">BBB</option>
  <option value="3">RRR</option>
  <option value="4">AAA</option>
</select>

注意:也最好使用 append() appentTo() html()