我想我知道这个问题,但我不知道如何正确处理它,所以我希望有人在这里有类似的问题并设法解决它的方法。我所拥有的是一个包含几列的表,除了一个列之外,所有这些列都可以进行排序。下面是该列的屏幕截图及其在工作中的排序。
正如您所看到的那样,它不会根据字母数字逻辑进行排序。我的假设是某些名称中包含逗号括号,括号等字符。那么说,我将如何处理这个问题,以便我可以使用datatables插件对这个alpha-numericly进行排序?主意的?
**** **** EDIT
这是我正在使用的代码,适用于除了这一列之外的所有内容..
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"}
]
});
答案 0 :(得分:3)
由于您正在显示链接,我猜您正在使用自定义渲染功能?
如果是这种情况,请在列定义中设置以下内容:
"bUseRendered": false
这将使表格对数据进行排序,而不是对渲染的输出进行排序。
答案 1 :(得分:3)
我认为最好的方法是使用aoColumnDefs。试试这个:
"aoColumnDefs": [
{
"sType": "string"
}
]
如果这不起作用,您可能需要创建自定义排序功能。请参阅this link。
答案 2 :(得分:0)
如果您使用自定义渲染方法,请使用&#34;键入&#34;的值。参数区分实际数据和自定义视图..如下所示,
"render": function ( data, type, full, meta ) {
if ( type === 'display' ) {
return '<a class="btn btn-link">' + full['description'] + '</a>';
}
return full['description'];
}
数据表在内部将类型传递为&#34;显示&#34;在进行排序,搜索等时生成视图和其他值
答案 3 :(得分:0)
在我的情况下,我的第一列包含图像,我发现对该列进行排序正确地对第二列进行排序,但是当我单击以对第二列进行排序时,它排序错误。 我通过'aTargets'禁用第一列并将'sType'设置为'null'来解决这个问题:
"aoColumnDefs": [
{ 'bSortable': true, 'sType':"null", 'aTargets': [1, 6] },
]