Tablesorterプラグインを使用して、MVC.NETアプリでテーブルを並べ替えています。私の列のほとんどは文字列であり、問題はありません。数値のものでもありません。問題は、日時列も文字列であるかのように並べ替えられていることです。これらは次のように並べ替えられます:01/04/2009、02/02/2009、03/08/2009など。そのビューのモデルからデータを取得します。
私の呼び出しはデフォルトです:
$("#table").tablesorter();
運が悪かったのでdateformatを指定してみました:
$("#table").tablesorter({
dateFormat: 'dd/mm/yyyy'});
ランダムな日付の静的テーブルを手動で入力すると、奇妙なことが起こります。仕分けされます!しかし、私のデータはDB呼び出しから取得され、モデルに入れられます。次に、それを繰り返して、データを使用してtrを書き込みます。
前もって感謝します。
編集:それは私がtrを作成する方法に関連する何かでしょうか?
<% foreach (var item in Model) { %>
<tr>
<td>
<%= Html.Encode(item.date) %>
</td>
<td>...</td>
<td>...</td>
<td>...</td>
</tr>
<% } %>
Tablesorterパーサーを日付列に追加してみてください。 Tablesorterには、shortDate、usLongDate、isoDateのパーサーが付属しています。
$("#table").tablesorter({
headers: { colNum: { sorter: 'shortDate'} }
});
ここで、colNumは日付の列です。 tablesorterサイトで見つけた唯一の例は ここ です。これは、tablesorterが数値を間違ってソートしている場合にも機能します。パーセント、IPアドレスなどの他のパーサーもあります。ソースコードの終わり近くを見てください、そしてそれらはそこにリストされます。
編集:ソースコードを見ると、dateFormatオプションは「us」、「uk」、「dd/mm/yy」のみを探しているように見えます"または" dd-mm-yy "。 「uk」を試してみるとどうなりますか?
同じ問題が発生し、datetimeというカスタムパーサーを追加しました。
$.tablesorter.addParser({
id: "datetime",
is: function(s) {
return false;
},
format: function(s,table) {
s = s.replace(/\-/g,"/");
s = s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{4})/, "$3/$2/$1");
return $.tablesorter.formatFloat(new Date(s).getTime());
},
type: "numeric"
});
次に、Gabe Gが公開したように、その形式を必要な列に適用する必要があります(たとえば、このソーターを最初の列に割り当てるには、次のようにする必要があります。
$("#mytable").tablesorter(
{ dateFormat: 'dd/mm/yyyy',
headers:
{
0:{sorter:'datetime'}
}
} );
日付の前に数値形式(yyyymmdd)で非表示のスパンタグを追加することもできます。このテキストが最初に表示され、並べ替えに使用されますが、非表示になり、必要な形式のみが表示されます。
<td><span style="display:none">20130923</span>23 September 2013</td>
Jquerytablesorterプラグインのアップデートがあります。
アプリケーションのロケールに応じて、この更新によって日付を並べ替えることができます。
以下のリンクをたどると、テーブルソーターの更新を表示できます。
http://mottie.github.io/tablesorter/docs/
日付形式を設定します。利用可能なオプションは次のとおりです。 (変更されたv2.0.23)。
以前のバージョンでは、このオプションは「us」、「uk」、または「dd/mm/yy」として設定されていました。このオプションは、必要な日付形式によりよく適合するように変更されました。それは4桁の年でのみ機能します!
ソーターは「shortDate」に設定する必要があり、日付形式は「dateFormat」オプションで設定するか、「headers」オプション内の特定の列に設定できます。デモページを参照して、機能することを確認してください。
$(function(){
$("table").tablesorter({
dateFormat : "mmddyyyy", // default date format
// or to change the format for specific columns,
// add the dateFormat to the headers option:
headers: {
0: { sorter: "shortDate" }, // "shortDate" with the default dateFormat above
1: { sorter: "shortDate", dateFormat: "ddmmyyyy" }, // day first format
2: { sorter: "shortDate", dateFormat: "yyyymmdd" } // year first format
}
});
});
個々の列は、優先度の順に設定された以下を追加することで変更できます(すべて同じことを行います)(Modified v2.3.1):
私の場合、私は使用しました
$("#myTable").tablesorter({dateFormat: "uk"})
バージョンの。
これが私にとっての答えでした:
<td data-order=<fmt:formatDate pattern = "yyyy-MM-dd" value = "${myObject.myDate}" />>${myObject.myDate}</td>
詳細については、こちらをご覧ください: https://datatables.net/manual/data/
正直なところ、私にとって最も簡単な解決策は、compsmartが言ったように、実際の日付の前にいくつかの隠しテキストを追加することでした。
私はcompsmartのKISSソリューションが好きです!
より簡単な方法の使用:
dateFormat:'mm/dd/yyyy hh:mm:ss'