我使用jQuery DataTables 1.10.4来呈现一个表,每个表的行都包含有关文件的信息。
此表中的列显示文件大小。渲染时,我希望该列读取NNN KB
(带有" KB"后缀)。我还希望用户能够对文件大小列进行数字排序。
但是,虽然我的files
数据数组只有数字表示文件的大小(以字节为单位),但排序功能似乎使用字符串的呈现值,我得到一个字符串排序,而不是数字排序。
是否有一种简单的方法可以声明列的类型,使得排序是数字的?即为了排序,我希望jQuery DataTables使用files数组中的值。
如果这不能用columnDefs
规范声明,那么最简单的排序插件或函数是什么?
这是我到目前为止所拥有的。
var files = {['name','dir',10240], .... }
var sortable_size = function(data, type, full, meta) {
return Math.floor(full[2]/1024) + " KB";
};
$('#files').dataTable({
data: files,
pagingType: 'simple',
columnDefs: [
{ targets:0, render:clickable_message },
{ targets:3, render:clickable_attachment },
{ targets:2, render:sortable_size, width:'100px', type:'num' }
],
// no width for col 0 here because it causes linewrap in data
// and size fields (attachment name can be fairly wide as well)
order:[[1, 'asc']], // col 1 (date), ascending
fnInitComplete: function() {
$('#attachments').fadeIn();
}
});
答案 0 :(得分:2)
解决方案很简单,当显示数据(type === 'display'
)时,返回格式化字符串,否则返回要排序的数据。来自manual:
请求的类型通话数据 - 这将是
'filter'
,'display'
,'type'
或'sort'
。
var sortable_size = function(data, type, full, meta) {
if(type === 'display'){
return Math.floor(full[2]/1024) + " KB";
} esle {
return data;
}
};
有关详细信息,请参阅columns.render。
如果您没有以字节为单位存储文件大小,解决方案是使用File size sorting plug-in。
答案 1 :(得分:0)
用我自己的排序类型解决它:
$.fn.dataTableExt.oSort['sort-kb-asc'] = function(x,y) {
console.log('x =' + x + ' y = ' + y);
x = parseInt(x.substring(0, x.indexOf(' KB')));
y = parseInt(y.substring(0, y.indexOf(' KB')));
console.log('x =' + x + ' y = ' + y);
return ((x < y) ? -1 : ((x > y) ? 1 : 0));
};
$.fn.dataTableExt.oSort['sort-kb-desc'] = function(x,y) { return -1 * $.fn.dataTableExt.oSort['sort-kb-asc'](x,y); }
并在我的columnDefs调用中:
{targets:2,render:sortable_size,width:'100px',type:'sort-kb',className: "dt-right"},