javascript Jquery Datatables 列渲染和排序
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/25319193/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Jquery Datatables column rendering and sorting
提问by flyingL123
I'm working with a datatable that includes a column of mysql timestamps in the format YYYY-MM-DD HH:MM:SS
. My table is set to initially sort by this column. Datatables correctly autodetects the timestamps format and sorts appropriately.
我正在使用一个数据表,其中包含格式为 .mysql 的一列 mysql 时间戳YYYY-MM-DD HH:MM:SS
。我的表设置为最初按此列排序。数据表正确地自动检测时间戳格式并适当排序。
I'm now trying to alter the appearance of this column to be more user friendly, but not effect the way it gets sorted. So, I'm using the columns.render
functionality like this:
我现在正在尝试更改此列的外观以使其更加用户友好,但不会影响它的排序方式。所以,我正在使用这样的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);
}
}
As soon as I do this, sorting no longer works correctly. I was under the impression that the render
function should only effect the display of the data, but that it should still be sorted according to the underlying data on that row's data object. These are the docs I am trying to use (http://datatables.net/reference/option/columns.render).
一旦我这样做,排序就不再正常工作。我的印象是该render
函数应该只影响数据的显示,但它仍然应该根据该行数据对象上的基础数据进行排序。这些是我尝试使用的文档(http://datatables.net/reference/option/columns.render)。
Does anyone know how I can sort based on the actual timestamp but display a more user friendly date?
有谁知道我如何根据实际时间戳排序但显示更用户友好的日期?
回答by flyingL123
I think I got it. I just had to tell the render function to only operate on "display" types:
我想我明白了。我只需要告诉渲染函数只对“显示”类型进行操作:
{
"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;
}
},
回答by Rohit Hazra
Well if it is a server-side datatable, what you can do is edit a json just before it is passed
like in the beginning of ssp.class.php in the new datatables (tell me if you are using the old one)
NOTE: in the new datatables, it is an inbuilt function called formatter that does the same but you can use custom function like this
好吧,如果它是服务器端数据表,您可以做的是在新数据表中像 ssp.class.php 开头一样在传递之前编辑 json(如果您使用的是旧数据表,请告诉我)
注意:在新的数据表中,它是一个称为格式化程序的内置函数,它执行相同的操作,但您可以使用这样的自定义函数
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>';
}
here i am simply editing a 0 and 1 in my db to a Label Stopped and Running
you can do something like parse_date and store a reformatted one
在这里,我只是将数据库中的 0 和 1 编辑为 Label Stopped and Running
您可以执行诸如 parse_date 之类的操作并存储重新格式化的