使用Javascript对下拉列表进行排序

Che*_*tan 19 javascript sorting list drop-down-menu

我想用javascript对下拉项目进行排序,任何人都可以告诉我如何做到这一点.

mas*_*sto 49

你可以使用jQuery和类似的东西:

$("#id").html($("#id option").sort(function (a, b) {
    return a.text == b.text ? 0 : a.text < b.text ? -1 : 1
}))
Run Code Online (Sandbox Code Playgroud)

但是,问问你为什么以及你想要完成什么可能更好.

  • +1完全基于没有jQuery需要做的事情(见下面的答案). (3认同)

alt*_*lue 7

<select id="foo" size="10">
  <option value="3">three</option>
  <option value="1">one</option>
  <option value="0">zero</option>
  <option value="2">two</option>
</select>
<script>
  // WARN: won't handle OPTGROUPs!
  var sel = document.getElementById('foo');
  // convert OPTIONs NodeList to an Array
  // - keep in mind that we're using the original OPTION objects
  var ary = (function(nl) {
    var a = [];
    for (var i = 0, len = nl.length; i < len; i++)
      a.push(nl.item(i));
    return a;
  })(sel.options);
  // sort OPTIONs Array
  ary.sort(function(a,b){
    // sort by "value"? (numeric comparison)
    // NOTE: please remember what ".value" means for OPTION objects
    return a.value - b.value;
    // or by "label"? (lexicographic comparison) - case sensitive
    //return a.text < b.text ? -1 : a.text > b.text ? 1 : 0;
    // or by "label"? (lexicographic comparison) - case insensitive
    //var aText = a.text.toLowerCase();
    //var bText = b.text.toLowerCase();
    //return aText < bText ? -1 : aText > bText ? 1 : 0;
  });
  // remove all OPTIONs from SELECT (don't worry, the original
  // OPTION objects are still referenced in "ary") ;-)
  for (var i = 0, len = ary.length; i < len; i++)
    sel.remove(ary[i].index);
  // (re)add re-ordered OPTIONs to SELECT
  for (var i = 0, len = ary.length; i < len; i++)
    sel.add(ary[i], null);
</script>
Run Code Online (Sandbox Code Playgroud)

  • 对不起,但是我不明白你评论的重点是什么,因为我确定你已经看了下面一行的那个数字比较确实是一个,猜猜是什么,"词典比较"选项'"文字"?!:( (2认同)

Ish*_*ain 5

您可以尝试JQuery排序功能 -

试试这个

HTML代码 -

<select id="ddlList">
  <option value="3">Three</option>
  <option value="1">One</option>
  <option value="1">one</option>
  <option value="1">a</option>
  <option value="1">b</option>
  <option value="1">A</option>
  <option value="1">B</option>
  <option value="0">Zero</option>
  <option value="2">Two</option>
  <option value="8">Eight</option>
</select>
Run Code Online (Sandbox Code Playgroud)

JQUERY CODE -

$("#ddlList").html($('#ddlList option').sort(function(x, y) {        
     return $(x).text().toUpperCase() < $(y).text().toUpperCase() ? -1 : 1;
}));
$("#ddlList").get(0).selectedIndex = 0;
e.preventDefault();
Run Code Online (Sandbox Code Playgroud)

要么

你也可以使用数组排序 -

试试这个

 var options = $('#ddlList option');
 var arr = options.map(function (_, o) { return { t: $(o).text(), v: o.value }; }).get();
 arr.sort(function (o1, o2) { return o1.t.toUpperCase() > o2.t.toUpperCase() ? 1 : o1.t.toUpperCase() < o2.t.toUpperCase() ? -1 : 0; });         
 options.each(function (i, o) {
     o.value = arr[i].v;
     $(o).text(arr[i].t);
 });
Run Code Online (Sandbox Code Playgroud)


Rus*_*Cam 3

将选项值和文本放入数组中,对数组进行排序,然后用从排序数组构造的新元素替换现有选项元素。