jquery 数据表如何呈现和排序 mm-dd-yyyy
jquery datatables how to render and sort mm-dd-yyyy
我已经实现了数据表,并且已经尝试了几个小时来让数据正确显示和排序,但无济于事。我希望将数据显示为 mm-dd-yy。我可以使用 mm/dd/yy,但我有 2000 年前的日期,所以 99 的排序最高而不是最低。我将数据更改为发送 4 位数年份,但不想显示它。我试过这个:
$('#shiporderinfotable').dataTable( {
"data": dataSet,
"columns": [
{ "title": "Store", "class": "dr" },
{ "title": "Order#", "class": "dr" },
{ "title": "Cust PO#", "class": "dl" },
{ "title": "Order Date", "class": "dr" },
{ "title": "Invoice", "class": "dr" },
{ "title": "Inv Date", "class": "dr" },
{ "title": "Qty<br>Ord", "class": "dr" },
{ "title": "Qty<br>Shp", "class": "dr" },
{ "title": "Qty<br>Open", "class": "dr" },
{ "title": "Qty<br>Pick", "class": "dr" },
{ "title": "Pick<br>Date", "class": "dr" },
{ "title": "Items", "class": "dl" }
],
"columnDefs": [
{
"render": function ( data, type, row ) {
return data.substr(0,2)+'-'+data.substr(3,2)+'-'+data.substr(8,2);
},
"targets": [3,5,10]
}]
} );
如果我去掉 render 语句,它就没问题了。一旦我添加了渲染语句,它就会进行左对齐字符排序。有没有办法只为显示而不是排序进行渲染?
markpsmith 的上述评论回答了问题。我添加了这个答案以便能够关闭它。我想出了下面列出的代码。我加载了 3 个额外的日期数据列,格式为 mm/dd/yyyy,并将列出的日期列留空。然后我将排序设置为使用这些列并呈现列 mm-dd-yy 的显示。
$.ajax({url:arg,success:function(result){
$('#shiporderinfo').html( '<table cellpadding="0" cellspacing="0" border="0" class="display" id="shiporderinfotable" width="100%"></table>' );
var dataSet = eval(result);
$('#shiporderinfotable').dataTable( {
"data": dataSet,
"columns": [
{ "title": "Store", "class": "dr" },
{ "title": "Order#", "class": "dr" },
{ "title": "Cust PO#", "class": "dl" },
{ "title": "Order Date", "class": "dr", "iDataSort": 12 },
{ "title": "Invoice", "class": "dr" },
{ "title": "Inv Date", "class": "dr", "iDataSort": 13 },
{ "title": "Qty<br>Ord", "class": "dr" },
{ "title": "Qty<br>Shp", "class": "dr" },
{ "title": "Qty<br>Open", "class": "dr" },
{ "title": "Qty<br>Pick", "class": "dr" },
{ "title": "Pick<br>Date", "class": "dr", "iDataSort": 14 },
{ "title": "Items", "class": "dl" },
{ "title": "Order Date Sort", "visible": false },
{ "title": "Invoice Date Sort", "visible": false },
{ "title": "Pick Date Sort", "visible": false }
]
,"order": [[ 3, "desc" ]]
,"lengthMenu": [[10, 20, 50, 100, -1], [10, 20, 50, 100, "All"]]
,
"columnDefs": [
{
"render": function ( data, type, row ) {
tmp = row[12];
if (tmp == '') {
return '';
} else {
return tmp.substr(0,2)+'-'+tmp.substr(3,2)+'-'+tmp.substr(8,2);
}
},
"targets": [3]
},{
"render": function ( data, type, row ) {
tmp = row[13];
if (tmp == '') {
return '';
} else {
return tmp.substr(0,2)+'-'+tmp.substr(3,2)+'-'+tmp.substr(8,2);
}
},
"targets": [5]
},{
"render": function ( data, type, row ) {
tmp = row[14];
if (tmp == '') {
return '';
} else {
return tmp.substr(0,2)+'-'+tmp.substr(3,2)+'-'+tmp.substr(8,2);
}
},
"targets": [10]
}]
} );
$('.ajax-order-popup').magnificPopup({type: 'ajax',closeOnContentClick: true});
}});
我已经实现了数据表,并且已经尝试了几个小时来让数据正确显示和排序,但无济于事。我希望将数据显示为 mm-dd-yy。我可以使用 mm/dd/yy,但我有 2000 年前的日期,所以 99 的排序最高而不是最低。我将数据更改为发送 4 位数年份,但不想显示它。我试过这个:
$('#shiporderinfotable').dataTable( {
"data": dataSet,
"columns": [
{ "title": "Store", "class": "dr" },
{ "title": "Order#", "class": "dr" },
{ "title": "Cust PO#", "class": "dl" },
{ "title": "Order Date", "class": "dr" },
{ "title": "Invoice", "class": "dr" },
{ "title": "Inv Date", "class": "dr" },
{ "title": "Qty<br>Ord", "class": "dr" },
{ "title": "Qty<br>Shp", "class": "dr" },
{ "title": "Qty<br>Open", "class": "dr" },
{ "title": "Qty<br>Pick", "class": "dr" },
{ "title": "Pick<br>Date", "class": "dr" },
{ "title": "Items", "class": "dl" }
],
"columnDefs": [
{
"render": function ( data, type, row ) {
return data.substr(0,2)+'-'+data.substr(3,2)+'-'+data.substr(8,2);
},
"targets": [3,5,10]
}]
} );
如果我去掉 render 语句,它就没问题了。一旦我添加了渲染语句,它就会进行左对齐字符排序。有没有办法只为显示而不是排序进行渲染?
markpsmith 的上述评论回答了问题。我添加了这个答案以便能够关闭它。我想出了下面列出的代码。我加载了 3 个额外的日期数据列,格式为 mm/dd/yyyy,并将列出的日期列留空。然后我将排序设置为使用这些列并呈现列 mm-dd-yy 的显示。
$.ajax({url:arg,success:function(result){
$('#shiporderinfo').html( '<table cellpadding="0" cellspacing="0" border="0" class="display" id="shiporderinfotable" width="100%"></table>' );
var dataSet = eval(result);
$('#shiporderinfotable').dataTable( {
"data": dataSet,
"columns": [
{ "title": "Store", "class": "dr" },
{ "title": "Order#", "class": "dr" },
{ "title": "Cust PO#", "class": "dl" },
{ "title": "Order Date", "class": "dr", "iDataSort": 12 },
{ "title": "Invoice", "class": "dr" },
{ "title": "Inv Date", "class": "dr", "iDataSort": 13 },
{ "title": "Qty<br>Ord", "class": "dr" },
{ "title": "Qty<br>Shp", "class": "dr" },
{ "title": "Qty<br>Open", "class": "dr" },
{ "title": "Qty<br>Pick", "class": "dr" },
{ "title": "Pick<br>Date", "class": "dr", "iDataSort": 14 },
{ "title": "Items", "class": "dl" },
{ "title": "Order Date Sort", "visible": false },
{ "title": "Invoice Date Sort", "visible": false },
{ "title": "Pick Date Sort", "visible": false }
]
,"order": [[ 3, "desc" ]]
,"lengthMenu": [[10, 20, 50, 100, -1], [10, 20, 50, 100, "All"]]
,
"columnDefs": [
{
"render": function ( data, type, row ) {
tmp = row[12];
if (tmp == '') {
return '';
} else {
return tmp.substr(0,2)+'-'+tmp.substr(3,2)+'-'+tmp.substr(8,2);
}
},
"targets": [3]
},{
"render": function ( data, type, row ) {
tmp = row[13];
if (tmp == '') {
return '';
} else {
return tmp.substr(0,2)+'-'+tmp.substr(3,2)+'-'+tmp.substr(8,2);
}
},
"targets": [5]
},{
"render": function ( data, type, row ) {
tmp = row[14];
if (tmp == '') {
return '';
} else {
return tmp.substr(0,2)+'-'+tmp.substr(3,2)+'-'+tmp.substr(8,2);
}
},
"targets": [10]
}]
} );
$('.ajax-order-popup').magnificPopup({type: 'ajax',closeOnContentClick: true});
}});