【问题标题】:JQuery DataTable UK Date Sort Not WorkingJQuery DataTable UK 日期排序不起作用
【发布时间】:2014-09-24 09:49:21
【问题描述】:

用这个把我的头撞到墙上。正如问题标题所示,我的 MVC Razor 视图中有一个 JQuery 数据表。其中一列显示英国日期 (dd/mm/yyyy),我想根据它的英国日期对该列进行排序。

我的 Razor 视图中有以下内容

<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 上查看了其他类似的问题,但仍然无法正常工作。

谁能指点我正确的方向。

感谢您的帮助。

【问题讨论】:

    标签: jquery asp.net-mvc sorting jquery-datatables


    【解决方案1】:

    试试这个:将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) 更改排序函数以排除时间因素

    "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

    【讨论】:

    • 谢谢,但这没有用。它实际上从您的答案中删除了所有列的排序。
    • 我试过你的其他答案,排序又回来了,但日期列仍然没有正确排序。还有其他建议吗?
    • 我遇到了问题,首先您需要更正sType,然后在没有时间的情况下对函数或日期值进行排序。请检查。
    • 太棒了。过去我遇到了很多麻烦,但现在感谢您的帮助,我知道了原因。
    猜你喜欢
    • 1970-01-01
    • 2014-08-26
    • 1970-01-01
    • 2014-08-30
    • 1970-01-01
    • 2013-12-01
    • 1970-01-01
    • 2017-10-28
    • 2019-11-10
    相关资源
    最近更新 更多