I have a simple DataTables grid which contains date columns. I have provided two values for the date in my JSON data set, one for display and one specifically designed so th
You have to sort column by a hidden column (Sort). To to this you have to include a column that contains the sort data, hide the column and sort the Display Column by the hidden column.
"aoColumnDefs:[
{"sTitle": "Display", "iDataSort":1, "aTargets":[2]},
{"bVisible": false, "aTargets":[2]}
],
aoColumns: [
{ mData: "User" },
{ mData: "Display"},
{ mData: "Sort"}
]
I believe the existing answers are deprecated due to updates to DataTables. HTML5 supports attributes that DataTables can use to easily sort columns. Specifically the data-sort
attribute. (See https://datatables.net/examples/advanced_init/html5-data-attributes.html)
I can easily sort tables like so:
<table>
<thead>
<tr>
<td>Name</td>
<td>Age</td>
</tr>
</thead>
<tbody>
<tr>
<td>John Doe</td>
<td data-sort="37">2/1/78 (37 years old)</td>
</tr>
<tr>
<td>Jane Doe</td>
<td data-sort="35">12/1/80 (35 years old)</td>
</tr>
</tbody>
</table>
It doesn't matter that the 'Age' column contains numbers, symbols, and letters, DataTables will sort using the 'data-sort' attribute.
Use the data-sort
attribute on the td, like
<td data-sort="12342345434">Thursday, May 9th 11</td>
For those using an ajax data source you can use Orthogonal data. For instance, in your ajax response return one of your columns as an object with a display value and a sort value (similar to what the OP did):
{
"data":[
{
"customer":"JOHN DOE",
"rating":{
"display": "★★★",
"sort":"3"
},
},
{
"customer":"BILLY NOAH",
"rating":{
"display": "★★★★★",
"sort":"5"
},
}
]
}
Now in your table options you can use columns()
like this:
"columns" : [
{
"data":"customer"
},
{
"data":"rating",
"render":{
"_":"display",
"sort":"sort"
}
}
]
Since you already have your data in sortable and displayable format, this is all code you need.
It will use Date.Sort
for sorting and Date.Display
for visuals. This is documented here.
columns: [{
data: 'Date',
render: {
_: 'Display',
sort: 'Sort'
}
}]
+1 JocaPC
I'd like to add to JocaPC's answer by reminding everyone that javascript utilizes zero-indexed arrays.
Example:
HiddenSortString (0) | Date (1) | Some Text (2) ................................................................... 1349035566 | September 30, 2012 2:06 pm | blah blah 1349118137 | October 01, 2012 1:02 pm | blah blah 1349371297 | October 04, 2012 11:21 am | blah blah ...................................................................
To sort the date field using the hidden string you would use the following.
$('.mytable').dataTable({
"aoColumns": [{"bVisible": false},{"iDataSort": 0},null]
});