3

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

<ul>
  <li>1 - 5 days</li>
  <li>11 - 15 days</li>
  <li>16 - 20 days</li>
  <li>6 days - 10 days</li>
</ul>

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

现在,我总是可以更改个位数的项目,使 1 - 5 为 01 - 05,但从美学上讲,我希望有办法解决这个问题!

我已经尝试过在 jQuery 中订购 <UL>/<OL> 的最简单方法是什么?,但它不适用于我有多个数字与文本混合的这种情况。

如果它有助于作为起点:http: //jsfiddle.net/5gHet/

非常感谢!真的很感激任何想法。

4

3 回答 3

3

用于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;
});

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

于 2013-02-23T23:00:27.827 回答
0

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

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);
});

演示地址:http: //jsfiddle.net/5gHet/1/

于 2013-02-23T23:02:34.190 回答
0

小提琴

除了 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());
于 2013-02-23T23:35:53.600 回答