dataTables中的字母数字零填充?

时间:2012-10-07 01:03:46

标签: javascript jquery datatables google-sheets

我觉得这有一个“呃”的答案,但是

我正在使用jQuery插件DataTables.net来显示json Google Spreadsheet。你可以在这里看到它:http://jsfiddle.net/ukoku/jEqu2/2/

我想通过Location列对行进行排序,该列以A1,B2格式读取,就像国际象棋一样。有了数字,我知道我需要零填充,但我不知道如何为字母数字数据添加零,也不知道如何使用DataTables代替常规字符串。

编辑:对不起,我不清楚。我认为需要添加零的地方是字母字符和位置插槽中的数字。例如,目前,Q9在Q14之后排序。我需要它首先按alpha(Ax,Bx)排序,然后在那种排序中作为数字。通常情况下,当我有1次显示高于10时,这是因为我需要用零填充来获得001和010.但是我不确定如何在Q009和Q014等的数字之间粘贴零,或者这甚至是正确的解决方案。

最终,目标是自定义CSS以显示组中具有相同位置的行。老实说我不知道​​这是否可能,但因为我甚至无法将数据排序......

2 个答案:

答案 0 :(得分:2)

这是你正在追求的正确轨道吗? http://jsfiddle.net/rMUWD/

答案 1 :(得分:0)

这是另一种方法:

var compare = function(a, b) {
        return a > b ? 1 : a === b ? 0 : -1;
    },
    compareAlphanumeric = function (a, b) {
        alpha = compare(a.alpha, b.alpha);
        numeric = compare(a.numeric, b.numeric);
        return (alpha === 1 | (alpha === 0 && numeric === 1)) ? 1 : (alpha === 0 && numeric === 0) ? 0 : -1;
    };
jQuery.fn.dataTableExt.oSort['alphaNumeric-asc'] = function(a, b) {
    var r = /^([A-Za-z]+)([0-9]+$)/,
        a = {
            "alpha": a.split(r)[1],
            "numeric": parseInt(a.split(r)[2], 10)
        },
        b = {
            "alpha": b.split(r)[1],
            "numeric": parseInt(b.split(r)[2], 10)
        };
        return compareAlphanumeric(a, b);
};
jQuery.fn.dataTableExt.oSort['alphaNumeric-desc'] = function(a, b) {
    var r = /^([A-Za-z]+)([0-9]+$)/,
        a = {
            "alpha": a.split(r)[1],
            "numeric": parseInt(a.split(r)[2], 10)
        },
        b = {
            "alpha": b.split(r)[1],
            "numeric": parseInt(b.split(r)[2], 10)
        };
        return compareAlphanumeric(b, a); //reverse a and b for desc
};

在这里工作小提琴:http://jsfiddle.net/jEqu2/3/

compare功能是您的基本比较功能。 compareAlphanumeric根据以下真值表返回1,0或-1:

/*
        Alpha   Numeric     Result
        -1      -1          -1
        -1      0           -1
        -1      1           -1
        0       -1          -1
        0       0           0
        0       1           1
        1       -1          1
        1       0           1
        1       1           1
*/

大部分实际工作都是在oSort函数中完成的:

//First declare a RegExp to split the location into an array of [letter, number] 
var r = /^([A-Za-z]+)([0-9]+$)/,
//convert the passed "a" parameter to an object containing its letter and number,
//and parse the number portion to an actual number instead of its string representation.
    a = {
        "alpha": a.split(r)[1],
        "numeric": parseInt(a.split(r)[2], 10)
    },
//do the same for b
    b = {
        "alpha": b.split(r)[1],
        "numeric": parseInt(b.split(r)[2], 10)
    };
//return the alphanumeric comparison
    return compareAlphanumeric(a, b);

在降序oSort中,我们只需要切换传递给compareAlphanumeric的参数的顺序。