3

javascript(または簡単または必要な場合はjQuery)を使用してソートしようとしているULがあります:

<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桁の項目を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 に答える