1

同様の質問をいくつか見ましたが、私の場合は正解がありません。

DataTablesプラグインを使用していくつかのテーブルを並べ替えています。

ただし、数値のようにデータを並べ替えることはできませんが、そうではありません(nut; -p)。たとえば、次のようなフォーマットされた価格を並べ替えることはできません。

  • 2150000€
  • 4500000€
  • 225000€</li>

そこで、 「Naturalsort 」というDataTablesプラグインを含めようとしました。しかし、それはうまくいかないようです、私はいくつかの間違いをするかもしれません、しかし私はそれらを見つけることができません。

どんな助けでもありがたいです。

表示/テストする必要があるのはJSfiddle(列を並べ替えてみてください...)

4

2 に答える 2

3

したがって、2つの問題があるようです。まず、dT はカスタム ソートを取得していません。それを無視して標準ソートを使用しているだけです。各列の並べ替えを指定することで、これを修正できました。

$('#table_list').dataTable({
    "aoColumns": [null, {"sType": "natural"}, null, null],
    "aaSorting": [[ 1, "asc" ]],
    "sScrollX": "100%",
});

次に、自然な並べ替えでは、これらの数値が期待どおりに並べ替えられません。次のように、スペースまでの最初の数値セクションを使用して並べ替えます。

2 150 000 €
4 750 000 €
210 000 €

したがって、おそらく独自のソートを書きたいだけでしょう。これが私が試した例です:

function testSort( a, b ) {
    var aa = a.replace(/[ \.]/g,''), bb = b.replace(/[ \.]/g,'');
    aa = parseInt( aa.substring( 0, aa.length - 1 ) );
    bb = parseInt( bb.substring( 0, bb.length - 1 ) );
    return aa == bb ? 0 : ( aa < bb ? -1 : 1 );
}

数字として読み取れるように、スペース、ピリオド、およびユーロ記号を削除することが重要です。

于 2012-04-24T20:53:11.093 に答える
1

ありがとう@Ryan P私のsType宣言が間違っていました...

最後に、それを機能させるためにさらにプラグインを追加する必要がありました。誰かに役立つ場合は共有します:

  • 自然な並べ替え: varchar 値の場合
jQuery.fn.dataTableExt.oSort['natural-asc']  = function(a,b) {
    return naturalSort(a,b);
};

jQuery.fn.dataTableExt.oSort['natural-desc'] = function(a,b) {
    return naturalSort(a,b) * -1;
};
  • 「null」型をformated-numにシフト解除します:
jQuery.fn.dataTableExt.aTypes.unshift(  
    function ( sData )  
    {  
        var deformatted = sData.replace(/[^\d\-\.\/a-zA-Z]/g,'');
        if ( $.isNumeric( deformatted ) ) {
            return 'formatted-num';
        }
        return null;  
    }  
);
  • Formatted-num : for... フォーマットされた数値
jQuery.fn.dataTableExt.oSort['formatted-num-asc'] = function(a,b) {
    /* Remove any formatting */
    var x = a.match(/\d/) ? a.replace( /[^\d\-\.]/g, "" ) : 0;
    var y = b.match(/\d/) ? b.replace( /[^\d\-\.]/g, "" ) : 0;

    /* Parse and return */
    return parseFloat(x) - parseFloat(y);
};

jQuery.fn.dataTableExt.oSort['formatted-num-desc'] = function(a,b) {
    var x = a.match(/\d/) ? a.replace( /[^\d\-\.]/g, "" ) : 0;
    var y = b.match(/\d/) ? b.replace( /[^\d\-\.]/g, "" ) : 0;

    return parseFloat(y) - parseFloat(x);
};

ここでの実例: http://jsfiddle.net/DzaQe/3/

于 2012-04-24T22:23:07.320 に答える