I find it difficult to follow the instructions on the page. I have a table showing the average lengths of time in one column, in the format HH: MM, for example, 10:45 means ten hours and forty-five minutes. I would like to be able to sort the entire table by the values ββin this column.
Here is my initialization code:
var aoTable = $("#TableStatistic").dataTable({ "bDestroy": true, "sDom": "<'row-fluid dt-header'<'span6'f><'span6'T>>t<'row-fluid dt-footer'<'span6'i><'span6'p>>", "oTableTools": { "aButtons": ["xls", "pdf", "print"], "sSwfPath": "../Content/media/swf/copy_csv_xls_pdf.swf" }, "aaData": statisticsModel.byCategoriesList(), "aaSorting": [[0, "desc"]], "bPaginate": false, "aoColumns": [ { "mDataProp": "CategoryName", "sTitle": "Reports.CategoryName" }, { "mDataProp": "AverageTime", "sTitle": "Reports.AverageTime", "sSortDataType": "duration-desc"}, { "mDataProp": "NumberOfProblemsSolved", "sTitle": "Reports.NumberOfProblemsSolved" } ], "oLanguage": MeridianTranslation.DataTable });
Here is what I ASSUME is - the right way to add a new sort and a new sSortType to my table:
jQuery.extend(jQuery.fn.dataTableExt.oSort['duration-desc'] = function (x, y) { var xHours = parseInt(x.slice(0, x.indexOf(':'))); var xMinutes = parseInt(x.slice(x.indexOf(':') + 1, x.length)) + xHours * 60; var yHours = parseInt(y.slice(0, y.indexOf(':'))); var yMinutes = parseInt(y.slice(y.indexOf(':') + 1, y.length)) + yHours * 60; return ((xMinutes < yMinutes) ? -1 : ((xMinutes > yMinutes) ? 1 : 0)); }); jQuery.extend(jQuery.fn.dataTableExt.oSort['duration-asc'] = function (x, y) { var xHours = parseInt(x.slice(0, x.indexOf(':'))); var xMinutes = parseInt(x.slice(x.indexOf(':')+1, x.length)) + xHours * 60; var yHours = parseInt(y.slice(0, y.indexOf(':'))); var yMinutes = parseInt(y.slice(y.indexOf(':')+1, y.length)) + yHours * 60; return ((xMinutes < yMinutes) ? 1 : ((xMinutes > yMinutes) ? -1 : 0)); });
I assume that there is a much better way to extract the number of minutes than the way I do it, but suppose my algorithm is valid. What should I do to properly initialize my DataTable and integrate this sorting function and data type into it? The table itself is displayed correctly, but when I try to sort the column in question, it sorts itself lexicographically, as if it were a row. Any ideas?
jquery sorting datatables
programstinator
source share