【问题标题】:How to sort fields in a <select> list but ignore one option如何对 <select> 列表中的字段进行排序但忽略一个选项
【发布时间】:2013-05-29 12:13:37
【问题描述】:

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

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

提前非常感谢!

【问题讨论】:

    标签: javascript jquery select option


    【解决方案1】:

    您可以使用: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

    【讨论】:

      【解决方案2】:

      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】:

        你可以使用not方法:

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

        http://jsfiddle.net/jgvfG/

        【讨论】:

          【解决方案4】:

          试试这个,

          $("#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/

          【讨论】:

            猜你喜欢
            • 2011-09-30
            • 2023-02-08
            • 2022-06-11
            • 1970-01-01
            • 1970-01-01
            • 2017-04-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多