2

これには「当たり前」の答えがあるように感じますが、

jQuery プラグイン DataTables.net を使用して、json Google スプレッドシートを表示しています。ここで実際の動作を確認できます: http://jsfiddle.net/ukoku/jEqu2/2/

チェスのように、A1、B2 形式で読み取られる Location 列で行を並べ替えたいと思います。数字を使用すると、ゼロのパディングが必要になることはわかっていますが、英数字データにゼロを追加する方法も、通常の文字列の代わりに DataTables を使用する方法もわかりません。

編集:申し訳ありませんが、明確ではありませんでした。ゼロを追加する必要があると思った場所は、ロケーション スロットのアルファベットと数字の間でした。現在、たとえば Q9 は Q14 の後にあるとソートされます。最初にアルファ(Ax、Bx)でソートし、次にそのソート内で数値としてソートする必要があります。通常、1 が 10 より大きいと表示されるのは、001 と 010 を取得するためにゼロをパッドレフトする必要があるためです。しかし、Q009 と Q014 などの数値の間にゼロを挿入する方法がわかりません。それは適切な解決策でもあります。

最終的には、CSS をカスタマイズして、グループ内の同じ位置の行を表示することが目標です。正直なところ、これが可能かどうかはわかりませんが、データを並べ替えることさえできないため....

4

2 に答える 2

2

これはあなたが求めていることの正しい軌道に乗っていますか? http://jsfiddle.net/rMUWD/

于 2012-10-07T01:40:10.017 に答える
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

于 2012-10-07T02:40:11.097 に答える