在JavaScript中,只有点才能作为小数分隔符有效。由于DataTables使用JavaScript对列值进行排序,因此它将使用逗号分隔符作为字符串来考虑数字。但是,这个问题很容易被排序插件取代。
jQuery.extend(jQuery.fn.dataTableExt.oSort, {
"numeric-comma-pre": function (a) {
// prepare number
a = +(a.replace(",", "."));
a = (isNaN(a)) ? Number.MAX_VALUE : a;
return a;
},
"numeric-comma-asc": function (a, b) {
return ((a < b) ? -1 : ((a > b) ? 1 : 0));
},
"numeric-comma-desc": function (a, b) {
return ((a < b) ? 1 : ((a > b) ? -1 : 0));
}
});
前面的代码块定义一个新的数据类型,要由数据表被用来列进行排序。此代码是可以在DataTables official site中找到的示例的改编版本。
插件对象中的第一个函数是将单元格值转换为数字的函数,以便它可以通过以下函数进行排序。在这种情况下,我遵循this post的建议,并使用一元运算符将值转换为数字。如果该值不是数字,则返回NaN,并将其更改为Number.MAX_VALUE。我这样做是因为我选择在排序升序时最后移动无效数字。
之后,只剩下创建数据表,并为我们想要的列定义新的数据类型。
jQuery("#myTable").dataTable({
"aoColumnDefs": [
{ "sType": "numeric-comma", "aTargets": [2,3] }
]
});
假设第三和第四列有逗号分隔的数字,他们现在必须正确排序。
那是PHP,JavaScript还是其他的代码? – 2013-03-13 13:47:01
我有一个头痛这也和最终使用的数据未格式化的数字,然后mRender对其进行格式化自己。 – 2013-03-13 13:47:10
我的问题是进入列“克拉”... – 2013-03-13 13:51:06