多位数的Javascript排序

多位数的Javascript排序,javascript,jquery,sorting,Javascript,Jquery,Sorting,我有一个ul,我正在尝试使用javascript(或者jQuery,如果更容易或必要的话)进行排序: 1-5天 11-15天 16-20天 6天-10天 我希望的顺序是:1-5天,6-10天,11-15天,16-20天 现在,我总是可以改变一位数的项目,使1-5是01-05,但美学上我希望有一种方法来解决这个问题 我已经尝试了中描述的过程,但它不适用于我将多个数字与文本混合在一起的情况 如果这有助于作为起点: 非常感谢!非常感谢您的建议。使用parseInt将字符串转换为出现的第一个数字

我有一个ul,我正在尝试使用javascript(或者jQuery,如果更容易或必要的话)进行排序:

  • 1-5天
  • 11-15天
  • 16-20天
  • 6天-10天
我希望的顺序是:1-5天,6-10天,11-15天,16-20天

现在,我总是可以改变一位数的项目,使1-5是01-05,但美学上我希望有一种方法来解决这个问题

我已经尝试了中描述的过程,但它不适用于我将多个数字与文本混合在一起的情况

如果这有助于作为起点:


非常感谢!非常感谢您的建议。

使用
parseInt
将字符串转换为出现的第一个数字

items.sort(function(a,b){
  var keyA = parseInt($(a).text(), 10);
  var keyB = parseInt($(b).text(), 10);

  if (keyA < keyB) return -1;
  if (keyA > keyB) return 1;
  return 0;
});
items.sort(函数(a,b){
var keyA=parseInt($(a).text(),10);
var keyB=parseInt($(b).text(),10);
if(keyAkeyB)返回1;
返回0;
});

仅供参考,如果第一个数字前面有非数字/空白字符,
parseInt()
将返回
NaN
,因此您需要手动提取数字。

在空格上拆分字符串,然后获取第一个数字

var items = $('ul li').get();
items.sort(function(a,b){
  var strA = $(a).text().split(' ');
  var strB = $(b).text().split(' ');

  if (parseInt(strA[0]) < parseInt(strB[0])) return -1;
  if (parseInt(strA[0]) > parseInt(strB[0])) return 1;
  return 0;
});
var ul = $('ul');
$.each(items, function(i, li){
  ul.append(li);
});
var items=$('ulli').get();
项目.排序(功能(a,b){
var strA=$(a).text().split(“”);
var strB=$(b).text().split(“”);
if(parseInt(strA[0])parseInt(strB[0]))返回1;
返回0;
});
var ul=$('ul');
$。每个(项目、功能(i、li){
ul.附加(li);
});
演示地点:

除了parseInt,您还可以执行一些正则表达式:

var $items = $('ul li');
var regex_first_num = /(\d+)/;

$items.sort(function(a,b){
  var keyA = $(a).text().match(regex_first_num)[0] *1;
  var keyB = $(b).text().match(regex_first_num)[0] *1;
  return keyA > keyB;
});

$('#newlist').append($items.clone());

只需
返回keyA-keyB
@Bergi:是的,这是OP的代码,所以我尽量减少更改,但这样会更好。如果他真的使用了
08-11天
,这将非常失败,不是在最新的JS:,而是重点。
var $items = $('ul li');
var regex_first_num = /(\d+)/;

$items.sort(function(a,b){
  var keyA = $(a).text().match(regex_first_num)[0] *1;
  var keyB = $(b).text().match(regex_first_num)[0] *1;
  return keyA > keyB;
});

$('#newlist').append($items.clone());