这是我的 JS。排序是 hh:mm 格式的时间。当我运行它时,我得到了错误:oSort[(sDataType ? sDataType : "string") + "-" + aaSort[i][1]] is not a function我试图默认为一个列排序声明排序。对前两列或最后一列进行排序是可行的,但是当我尝试默认为任何其他列时它不喜欢。似乎 DataTable 在初始化期间很难弄清楚这些列的 sDataType 是什么。
<script type="text/javascript">
$(document).ready(function() {
$('#example').dataTable({
"bJQueryUI": true,
"iDisplayLength": 50,
"aoColumns": [
null,
null,
{ "sType": 'string-case' },
{ "sType": 'string-case' },
{ "sType": 'string-case' },
{ "sType": 'string-case' },
null
],
"aaSorting": [[ 2, 'desc']]
} );
} );
function getTimeValue(x) {
var time = x.match(/(\d+)(?::(\d\d))?\s*(P?)/);
var h = parseInt(time[1],10) + (time[3] ? 12 : 0);
if(!time[3] && parseInt(time[1],10)==12) h = 0;
if(time[3] && parseInt(time[1],10)==12) h = 12;
return h * 60 + ( parseInt(time[2],10) || 0 );
}
/* Define two custom functions (asc and desc) for string sorting */
jQuery.fn.dataTableExt.oSort['string-case-asc'] = function(x,y) {
x = getTimeValue(x);
y = getTimeValue(y);
return ((x < y) ? -1 : ((x > y) ? 1 : 0));
};
jQuery.fn.dataTableExt.oSort['string-case-desc'] = function(x,y) {
x = getTimeValue(x);
y = getTimeValue(y);
return ((x < y) ? 1 : ((x > y) ? -1 : 0));
};