jquery datatables 列未正确排序
Posted
技术标签:
【中文标题】jquery datatables 列未正确排序【英文标题】:jquery datatables column not sorting properly 【发布时间】:2012-04-30 09:39:13 【问题描述】:我想我知道这个问题,但我不知道如何正确处理它,所以我希望这里有人遇到类似的问题并设法解决它。我所拥有的是一个包含几列的表格,除了一个之外,所有这些列都可以进行排序。下面是该列的屏幕截图及其在工作中的排序。
如您所见,它没有按照字母数字逻辑排序。我的假设是某些名称中包含字符,例如逗号的括号、方括号等。也就是说,我将如何解决这个问题,以便我可以使用数据表插件对这个字母数字进行排序?想法?
****编辑****
这是我正在使用的代码,适用于除这一列之外的所有内容..
jQuery.fn.dataTableExt.oSort['num-asc'] = function(a,b)
var x = a.replace( /<.*?>/g, "" );
var y = b.replace( /<.*?>/g, "" );
x = parseFloat( x );
y = parseFloat( y );
return ((x < y) ? -1 : ((x > y) ? 1 : 0));
;
jQuery.fn.dataTableExt.oSort['num-desc'] = function(a,b)
var x = a.replace( /<.*?>/g, "" );
var y = b.replace( /<.*?>/g, "" );
x = parseFloat( x );
y = parseFloat( y );
return ((x < y) ? 1 : ((x > y) ? -1 : 0));
;
$(document).ready(function()
$('#ledger').dataTable(
bAutoWidth: false,
bJQueryUI : true,
bProcessing: true,
bServerSide: false,
sPaginationType: "full_numbers",
bStateSave : false,
bUseRendered: false,
iDisplayLength: $entriesValue,
sDom: mw.superadmin.datatable.relatedListDom,
aLengthMenu: mw.superadmin.datatable.relatedListLengthMenu,
aaSorting: [[0,'asc']],
aoColumns: [
null,
"iDataSort": 2,
"bVisible": false, "sType": "num",
"iDataSort": 4, "bSortable": true ,
"bVisible": false, "sType": "num"
]
);
【问题讨论】:
【参考方案1】:由于您显示的是链接,我猜您正在使用自定义渲染功能?
如果是这种情况,请在列定义中设置以下内容:
"bUseRendered": false
这将使表格按数据排序,而不是渲染输出。
【讨论】:
这并没有什么不同 你在列定义中使用了吗?在您的示例中,它位于数据表定义中,这是错误的地方。 不完全确定,不幸的是,到目前为止,我对数据表所做的工作很少,它基本上是用力扔给我的,我把我的代码放在上面,如果这有助于解密什么我做错了 我没有提到这似乎只是 Chrome 浏览器上的一个问题,FF、IE、Safari 和 Opera 似乎都很好。这是 Chrome 特有的内容【参考方案2】:我认为最好的方法是使用 aoColumnDefs。试试这个:
"aoColumnDefs": [
"sType": "string"
]
如果这不起作用,您可能需要创建自定义排序功能。见this link。
【讨论】:
很遗憾没有帮助 也许可以尝试将 sType 字符串添加到 aoColumns 的第一列。使用 "sType": "string" 代替 null。此外,您可能需要查看iDataSort 的一些文档,因为您有用于排序的隐藏列。 我没有提到这似乎只是 Chrome 浏览器上的一个问题,FF、IE、Safari 和 Opera 似乎都很好。这是 Chrome 特有的内容【参考方案3】:如果您使用自定义渲染方法,请使用“类型”的值来区分实际数据和您的自定义视图。如下所示,
"render": function ( data, type, full, meta )
if ( type === 'display' )
return '<a class="btn btn-link">' + full['description'] + '</a>';
return full['description'];
在进行排序、搜索......等时,数据表将在内部将类型作为“显示”传递,同时生成视图和其他值
【讨论】:
【参考方案4】:在我的第一列包含图像的情况下,我发现对该列进行排序正确地对第二列进行了排序,但是当我单击对第二列进行排序时,它的排序不正确。 我通过'aTargets'禁用第一列并将'sType'设置为'null'来解决这个问题:
"aoColumnDefs": [
'bSortable': true, 'sType':"null", 'aTargets': [1, 6] ,
]
【讨论】:
以上是关于jquery datatables 列未正确排序的主要内容,如果未能解决你的问题,请参考以下文章
jQuery dataTables 排序不正确(带有笔划的拉丁字母 D)
标题/数据列未与 jQuery dataTables、bootstrap 2.3.2 对齐并启用水平滚动
在 jQuery DataTables 中使用锚标记对列进行排序