Jquery Datatables 列渲染和排序

Posted

技术标签:

【中文标题】Jquery Datatables 列渲染和排序【英文标题】:Jquery Datatables column rendering and sorting 【发布时间】:2014-10-08 18:18:12 【问题描述】:

我正在使用一个数据表,其中包含一列 mysql 时间戳,格式为 YYYY-MM-DD HH:MM:SS。我的表设置为最初按此列排序。 Datatables 正确地自动检测时间戳格式并进行适当的排序。

我现在正在尝试更改此列的外观以使其更加用户友好,但不会影响其排序方式。所以,我正在使用这样的columns.render 功能:


        "data":"created_at",
        "name":"date",
        "visible":true,
        "title":"Date Created",
        "render": function(data, type, full, meta)
                var date = new Date(data);
                var options = year: "numeric", month: "long", day: "numeric";

                return date.toLocaleDateString('en-US', options);
        

一旦我这样做,排序将不再正常工作。我的印象是render 函数应该只影响数据的显示,但它仍然应该根据该行数据对象上的基础数据进行排序。这些是我尝试使用的文档 (http://datatables.net/reference/option/columns.render)。

有谁知道我可以如何根据实际时间戳进行排序但显示对用户更友好的日期?

【问题讨论】:

【参考方案1】:

我想我明白了。我只需要告诉渲染函数只对“显示”类型进行操作:


        "data":"created_at",
        "name":"date",
        "visible":true,
        "title":"Date Created",
        "render": function(data, type, full, meta)
                if(type == "display")
                        var date = new Date(data);
                        var options = year: "numeric", month: "long", day: "numeric";

                        return date.toLocaleDateString('en-US', options);
                

                return data;
        
,

【讨论】:

在the docs,但是很容易漏掉:“这个函数可能会被多次调用”。 我这样做时搞砸的原因是type 有时是"type",在这种情况下你想返回初始的data。以这种方式执行逻辑更有意义。【参考方案2】:

好吧,如果它是一个服务器端数据表,你可以做的是在它被传递之前编辑一个 json 就像新数据表中 ssp.class.php 的开头一样(告诉我您是否使用旧数据表) 注意:在新的数据表中,它是一个名为 formatter 的内置函数,它的作用相同,但您可以使用这样的自定义函数

if ($j == 6) 
  if ($data[$i][$columns[$j]['db']] == 1) 
      $data[$i][$columns[$j]['db']] = '<label class="btn-danger disabled btn">Stopped</label>';
   else 
      $data[$i][$columns[$j]['db']] = '<label class="btn-success disabled btn">Running</label>';
  

在这里,我只是将数据库中的 0 和 1 编辑为已停止和正在运行的标签 您可以执行 parse_date 之类的操作并存储重新格式化的文件

【讨论】:

以上是关于Jquery Datatables 列渲染和排序的主要内容,如果未能解决你的问题,请参考以下文章

jQuery dataTables 排序不正确(带有笔划的拉丁字母 D)

DataTables页面列点击排序

jquery datatables 列渲染:多个 Ajax 调用

JQuery DataTables 列自己定义数据类型排序

第二次渲染后表格列宽发生变化 - JQuery DataTables

在 dataTables.js jQuery 插件中使列不可排序