dataTables是个强大的JQuery表格插件,可是不支持中文排序,这个比较使人头疼。javascript
这里针对几种常见的数据格式写了一个dataTables的中文排序方法:java
//添加中文排序 function addChieseAsc() { jQuery.fn.dataTableExt.oSort['chinese-asc'] = function(x, y) { x = (x instanceof Array) ? x[0] : x == '-' ? 'z' : x; //z的ASCII码值最大 y = (y instanceof Array) ? y[0] : y == '-' ? 'z' : y; //javascript自带的中文比较函数,具体用法可自行查阅了解 return x.localeCompare(y); }; jQuery.fn.dataTableExt.oSort['chinese-desc'] = function(x, y) { x = (x instanceof Array) ? x[0] : x == '-' ? 'z' : x; y = (y instanceof Array) ? y[0] : y == '-' ? 'z' : y; return y.localeCompare(x); }; // aTypes是插件存放表格内容类型的数组 // reg赋值的正则表达式,用来判断是不是中文字符 // 返回值push到aTypes数组,排序时扫描该数组,'chinese'则调用上面两个方法。返回null默认是'string' jQuery.fn.dataTableExt.aTypes.push(function(sData) { var reg = /^[\u4e00-\u9fa5]{0,}$/; if (reg.test(sData)) { return 'chinese'; } return null; }); }
注:正则表达式
这样还有一个问题就是:这里的方法只会识别中文,因此若是有的列是空字符串或者null和中文在一列的时候等是进入不了不了这个方法的,那么咱们就须要手动将这一列设置为中文,跳转验证这一步。数组
设置方法为:函数
在dataTables初始化的时候传入type:插件
$('#table').DataTable({ columns: [{ title: "test", type: 'chinese',//这里强制转换类型 data: "fieldsName", render: function(data) { return formatTableData(data) } }], }); function formatTableData(data) { switch (data) { case null: case "false": case "": return '-'; break; case true: return '是'; break; case false: return '否'; break; default: return data; break; } }
这样就大功告成了,dataTables能够对中文进行排序了,但愿对你们有帮助~code