gpt4 book ai didi

jquery - 为 jQuery dataTables 实现自定义 sSortType 和排序函数

转载 作者:行者123 更新时间:2023-12-03 22:20:05 26 4
gpt4 key购买 nike

我很难按照 documentation 上的说明进行操作页。我有一个表格,在一列中显示平均持续时间,采用 HH:MM 格式,例如 10:45 表示十小时四十五分钟。我希望能够按此列中的值对整个表格进行排序。

这是我的初始化代码:

    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

});

以下是我认为向表中添加新排序函数和新 sSortType 的正确方法:

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));
});

我想有一种比我的方法更好的提取分钟数的方法,但让我们假设我的算法是有效的。我必须做什么才能正确初始化我的数据表并将此排序函数和数据类型集成到其中?表本身可以正确呈现,但是当我尝试对有问题的列进行排序时,它会按字典顺序对自身进行排序,就好像它是一个字符串一样。有什么想法吗?

最佳答案

您应该提供 <type>-asc方法和<type>-desc方法。

然后根据 sType 进行排序列的属性:

jQuery.fn.dataTableExt.oSort["duration-desc"] = function (x, y) {
...
};

jQuery.fn.dataTableExt.oSort["duration-asc"] = function (x, y) {
...
}

var oTable = $("#products").dataTable({
"aaData": [
[1, "Dinner", "0:40"],
[2, "Study", "11:25"],
[3, "Sleep", "7:30"]
],
"aoColumns": [{
...
}, {
...
}, {
...
"bSortable": true,
"sType": "duration"
}]

});

这是一个简单的 jsFiddle示例。

关于jquery - 为 jQuery dataTables 实现自定义 sSortType 和排序函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20759814/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com