dataTables中文排序以及中英文混排亂序問題解決

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;
    });
}

注:正則表達式

  • x,y多是數組也多是字符串,如果數組則x[0]便可獲取數據
  • x,y若不是數組,則須要判斷字符串的具體類型,有多是"「、null等,這裏我將這種類型的數據過濾成'-‘了(方法在下面會給出),因此這裏判斷是不是’-‘,若是是,在判斷的時候視其爲最大,這裏用'Z'來代替
  • 該方法須要在onReady以前引入。

這樣還有一個問題就是:這裏的方法只會識別中文,因此若是有的列是空字符串或者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

相關文章
相關標籤/搜索