1

我在这里资助了一个非常好的排序功能 如何使用 jQuery 按字母顺序对列表进行排序? 工作几乎完美,除了它看起来像只按第一个字符排序,例如,如果你有类似的东西

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/

欢迎任何帮助!

4

2 回答 2

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。我对||there的使用比较懒惰,但我相信你可以想出一个更好的条件。

于 2012-07-16T02:14:15.777 回答
1

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

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

http://jsfiddle.net/sQsZQ/8/

于 2012-07-16T02:13:54.240 回答