使用jquery对选择选项进行排序

时间:2012-07-16 01:52:05

标签: jquery sorting

我在这里资助了一个非常好的排序功能 How may I sort a list alphabetically using jQuery? 例如,只有第一个charachter才能看起来像是完美无缺的 如果你有像

这样的东西
0-5000
5001-10000
10001-15000
15001-20000

订单看起来像

0-5000
10001-15000
15001-20000
5001-10000

而不是

0-5000
5001-10000
10001-15000
15001-20000

我为表格

中的每个选择重新设定了功能
var mylist = $('#myformid select');

$(mylist).each(function (sorter, elm) { 
  var listitems = $(this).children('option.myoptionclass').get();
   listitems.sort(function(a, b) {
      var compA = $(a).text().toUpperCase();
      var compB = $(b).text().toUpperCase();
      return (compA < compB) ? -1 : (compA > compB) ? 1 : 0;
   })
     $.each(listitems, function(idx, itm) { 
          $(this).parent().append(itm); 
      });

});

这是实例

http://jsfiddle.net/sQsZQ/6/

欢迎任何帮助!

2 个答案:

答案 0 :(得分:3)

我编辑了你的小提琴:http://jsfiddle.net/CBD33/2/ 我正在使用parseInt所以比较现在看起来像这样:

listitems.sort(function(a, b) {
  var compA = $(a).text().toUpperCase();
  var compB = $(b).text().toUpperCase();
  compA = (parseInt(compA,10) || compA)
  compB = (parseInt(compB,10) || compB)              


  return (compA < compB) ? -1 : (compA > compB) ? 1 : 0;
})

如果赋予parseInt的字符串值的第一个字符是数字,它将解析所有内容直到第一个非数字字符。如果第一个字符不是数字,它将返回NaN。我对||的使用相当懒惰,但我相信你可以提出更好的条件。

答案 1 :(得分:1)

在排序之前,您需要将字符串转换为数字

   var compA = parseInt($(a).text().split('-')[0]);
   var compB = parseInt($(b).text().split('-')[0]);

请参阅http://jsfiddle.net/sQsZQ/8/