用这个把我的头靠在墙上。正如问题标题所示,我在MVC Razor View中有一个JQuery Datatable。其中一列显示英国日期(年/月/日),我想根据它的英国日期对该列进行排序。
我的Razor View中有以下内容
<script type="text/javascript" charset="utf-8">
$(document).ready(function () {
jQuery.extend(jQuery.fn.dataTableExt.oSort, {
"date-uk-pre": function (a) {
var ukDatea = a.split('/');
return (ukDatea[2] + ukDatea[1] + ukDatea[0]) * 1;
},
"date-uk-asc": function (a, b) {
return ((a < b) ? -1 : ((a > b) ? 1 : 0));
},
"date-uk-desc": function (a, b) {
return ((a < b) ? 1 : ((a > b) ? -1 : 0));
}
});
$('#example').dataTable({
stateSave: true,
"aoColumnDefs" : [
{"aTargets" : [1] , "sType" : "uk_date"}
]
});
});
</script>
<table cellpadding="0" cellspacing="0" border="1" class="cdates" id="example">
<thead>
<tr>
<th>Name</th>
<th>Date</th>
<th>Status</th>
<th>Applicants</th>
</tr>
</thead>
<tbody>
@foreach (var cd in Model)
{
<tr>
<td><strong>@cd.CourseName</strong></td>
<td>@cd.CourseDate</td>
<td>@cd.CourseStatus</td>
<td>@Html.ActionLink("View Applicants", "CDApps", "Portfolio", new { @id = @cd.CourseDateID, @CourseID=@cd.CourseID }, null)</td>
</tr>
}
</tbody>
</table>
但我的日期排序仍然不起作用。我已经查看了Stack Overflow上的其他类似问题,但我仍然无法使其工作。
有谁能请我指出正确的方向。
感谢您的帮助。
答案 0 :(得分:4)
试试这个:将sType
值从uk_date
替换为date-uk
,就像您使用的排序函数"date-uk-pre"
,"date-uk-asc"
和"date-uk-desc"
一样
$('#example').dataTable({
stateSave: true,
"aoColumnDefs" : [
{"aTargets" : [1], "sType" : "date-uk"}
]
});
并且您的日期列的时间包含在日期值中,这会导致排序问题。
有以下两种解决方案
1)对sort函数进行更改以排除时间因素
"date-uk-pre": function (a) {
var ukDatea = a.split('/');
var yearWithoutTimeValue = ukDatea[2].split(" ")[0];
return (yearWithoutTimeValue + ukDatea[1] + ukDatea[0]) * 1;
},
<强> Demo 强>
2)从表列值中删除时间,如
<tr>
<td><strong>Electroconvulsive Therapy (ECT) (3 days)</strong></td>
<td>01/05/2014</td>
<td></td>
<td><a href="/Portfolio/CDApps/15454?CourseID=51">View Applicants</a></td>
</tr>
<强> DEMO 强>