2016-06-28 17 views
0

Datatablesを使用してテーブルをレンダリングする必要がある状況があります。しかし、私は垂直方向(上から下)ではなく、水平方向(左から右)に並べ替えることができる必要があります。私はこれを行うことができる方法はありますか?Datatableの左から右へのスクロール

:列はA、B、C、D、Eです。行はR1、R2、R3、R4 ... R30です。私はAからEをソートするのではなく、R1からR30のいずれかをソートして、A-Eを並べ替えるようにします。たとえば、R1の場合、値の昇順はA、E、D、B、C、R2の値はD、E、B、A、Cの順になります。行インデックス(その行の最初の列)をクリックして、私のの列を並べ替えることができるはずです。

更新(デフォルトは行が並べ替えされている):私は、水平ソートSorting Table Columns with jQuery Table Sorterために、この例を見つけましたが、どのように私は、これはDataTableので動作するのですか?

+0

はい、それを行うための方法があります。しかし、何を試しましたか? – Quotidian

+0

何もない - 私はDatatablesのドキュメントでそれを行う方法を見つけることができませんでした。それとも私は何かが恋しい? –

+0

このサンプルは水平方向のソートhttp://stackoverflow.com/questions/3127503/sorting-table-column-with-jquery-table-sorterが見つかりましたが、これをどのようにしてデータテーブルで処理するのですか? –

答えて

2

あなたが使用することができます。列を()の順序を()

var table = $('#example').DataTable(); 

table 
    .columns('.status') 
    .order('desc') 
    .draw(); 

さらに詳しい情報: https://datatables.net/reference/api/columns().order()

EDIT

あなたはdataTables.colReorder.minを使用することによって、これを達成することができます.jsプラグインを使用している場合は、ドラッグ&ドロップの初期設定を無効にすることもできます。

var table = $('#example').DataTable({ 
    colReorder: true 
}); 

table.on('click', 'td:first-of-type', function() { 
    var values = []; 
    var row = $(this).parent(); 

    row.children('td').each(function(i){ 
    values.push($(this).text()); 
    }); 

    var colOrder = values.sortIndices; 
    table.colReorder.order(colOrder); 

}); 

//get index after sort 
//credit to this post: 
//http://stackoverflow.com/questions/3730510/javascript-sort-array-and-return-an-array-of-indicies-that-indicates-the-positi 

function sortWithIndeces(toSort) { 
    for (var i = 0; i < toSort.length; i++) { 
    toSort[i] = [toSort[i], i]; 
    } 
    toSort.sort(function(a, b) { 
    return a[0] - b[0] 
    }); 
    toSort.sortIndices = []; 
    for (var j = 0; j < toSort.length; j++) { 
    toSort.sortIndices.push(toSort[j][1]); 
    toSort[j] = toSort[j][0]; 
    } 
    return toSort; 
} 
ここ

全作業例:私はここまで得ているではないと思われることなく、上記の彼の解決のためにStryderへ https://jsfiddle.net/qjp8Lnam/6/

+0

これはどのように違うのですか?私はそれを試して、それはまだ列の値に応じてトップダウンの並べ替えを行います。私は行の値に応じて左右のソートが必要です。 –

+0

申し訳ありませんが、私はあなたの質問を誤って...答えをすぐに投稿します – Stryder

+0

申し訳ありませんが、これにあなたに戻って私はしばらく時間がかかりました - インフルエンザがあった。 ありがとうございました!これは、私が欲しいものをするための非常に鮮明な方法です! 私は自分で解決策を見つけようとしていますが、もしあなたが既にそれを持っていたのかどうか疑問に思います。最初の列をどうやって並べ替えることができますか? :) –

0

おかげで、。

、私はは、静的(ヘッダ列に類似)の最初の列を保持ソートとに切り替え有するように、列(小数点および文字列)で非整数データを処理するために、それに追加

var currRow = ""; 
var currOrd = ""; 

var table = $('#example').DataTable({ 
    colReorder: true 
}); 

table.on('click', 'td:first-of-type', function() { 
    var values = []; 
    var row = $(this).parent(); 
    var valPos = []; 
    if (currRow != row.index()) { //if this row has not been sorted yet 
    currOrd = "desc"; 
    currRow = row.index(); 
    } 
    currOrd = (currOrd == "asc") ? "desc" : "asc"; //toggle sorting order 
    log("Sort row# " + (currRow + 1) + " in " + currOrd + " order"); 
    row.children('td').each(function() { 
    values.push(this.innerHTML); 
    valPos.push(values.length - 1); 
    }); 

    //remove logs :) 
    // log("initial values: " + values); 
    log("initial order: " + valPos); 
    // log("sorted values: " + sortWithIndeces(values)); 
    sortWithIndeces(values) 
    log("new column order: " + values.sortIndices); 

    var colOrder = values.sortIndices; 
    table.colReorder.order(colOrder); 

}); 

//get index after sort 
//credit to: 
//http://stackoverflow.com/questions/3730510/javascript-sort-array-and-return-an-array-of-indicies-that-indicates-the-positi 
//and http://stackoverflow.com/questions/38076749/left-to-right-scrolling-on-datatable/38077921#38077921 
function sortWithIndeces(toSort) { 
    var firCol = toSort[0]; 
    for (var i = 1; i < toSort.length; i++) { 
    toSort[i] = [toSort[i], i]; 
    } 
    toSort.sort(function(a, b) { 
    if ((a != firCol) && (b != firCol)) { 
     if (currOrd == "asc") { 
     if (($.isNumeric(a[0])) && ($.isNumeric(a[0]))) { 
      return a[0] - b[0]; 
     } else { 
      return ((a[0] > b[0]) ? 1 : ((a[0] < b[0]) ? -1 : 0)); 
     } 
     } else //descending order 
     { 
     if (($.isNumeric(a[0])) && ($.isNumeric(a[0]))) { 
      return b[0] - a[0]; 
     } else { 
      return ((b[0] > a[0]) ? 1 : ((b[0] < a[0]) ? -1 : 0)); 
     } 
     } 
    } else 
     return 0; 
    }); 
    toSort.sortIndices = [0]; 
    for (var j = 1; j < toSort.length; j++) { 
    toSort.sortIndices.push(toSort[j][1]); 
    toSort[j] = toSort[j][0]; 
    } 
    return toSort; 
} 

//throwaway :) 
function log(s) { 
    $('.console').append(s + "<br/>"); 
} 

jsFiddleにコードを洗練:https://jsfiddle.net/rsreeram84/tnozsp5s/

関連する問題