8

Datatablesを使用していくつかのデータを表示しています。データに新しい行を追加するために使用される入力もあります。この行を追加すると、テーブルが再初期化され、指定した並べ替えルールに従って新しい行が自動的に並べ替えられます。私の質問はこれです:現在表示されている順序でテーブルからデータを取得する方法はありますか?試してみると $('#tableCompetitors').dataTable().fnGetData()、表示されている順序ではなく、テーブルに追加された順序でデータが表示されます。

だから私がやりたいことをする簡単な方法はありますか?

PSそれが役立つ場合。元のデータソースは、テキストボックスから提供される配列の配列です。解析して配列にプッシュし、その配列をデータソースとして使用します。

4

3 に答える 3

10

私は同じ質問でこれに出くわしました。受け入れられた解決策はうまくいくかもしれませんが、私はより良い方法を見つけました:

$("example").DataTable().rows({search:'applied'}).data()

詳細については、 selector-modifierのドキュメントを参照してください。

于 2014-06-03T12:14:05.123 に答える
8

これは、3つのAPIコールバックを使用する1つのソリューションです。

  1. の変数を作成しますCurrentData
  2. 新しいテーブルがレンダリングされる前に起動CurrentDataする空の配列にリセットしますfnPreDrawCallback
  3. fnRowCallback各行のデータの配列へのアクセスを提供し、その配列をCurrentData配列にプッシュします
  4. fnDrawCallbackテーブルがレンダリングされた後に発生し、CurrentData配列内のソートされたデータにアクセスできるようになりました

JS

  var currData = [];
  $('#example').dataTable({
    "fnPreDrawCallback": function(oSettings) {
        /* reset currData before each draw*/
        currData = [];
    },
    "fnRowCallback": function(nRow, aData, iDisplayIndex, iDisplayIndexFull) {
        /* push this row of data to currData array*/
        currData.push(aData);

    },
    "fnDrawCallback": function(oSettings) {
        /* can now access sorted data array*/
        console.log(currData)
    }
});

デモ:http://jsfiddle.net/ne24B/

于 2013-02-12T02:49:54.810 に答える
2

別のオプションを提供しようとしているだけです。

以下は、フィルターで除外されている場合でも、テーブル内のすべての行を取得します。

var currData = [];
var oTable = $('#example').dataTable();

oTable.$("tr").each(function(index, row){
    //generate your array here
    // like $(row).children().eq(0) for the first table column
    currData.push($(row).children().eq(0));
    // return the data in the first column
    currData.push($(row).children().eq(0).text());
});

または、フィルターに一致する結果が必要な場合は、次のようにします。

var currData = [];
var oTable = $('#example').dataTable();

oTable.$("tr", {"filter":"applied"}).each(function(index, row){
    //generate your array here
    // like $(row).children().eq(0) for the first table column
    currData.push($(row).children().eq(0));

    // return the data in the first column
    currData.push($(row).children().eq(0).text());
});

currDataには、最初の列データのソートされたリストが含まれます。

編集:行全体のテキストを配列に入れる。

$(row + " td").each(function(index, tdData){
    currData.push($(tdData).text());
});

また

$(row).children().each(function(index, tdData){
    currData.push($(tdData).text());
});

このようにして、配列に含めることができるものをもう少し制御できます。私の2セント。

于 2013-02-13T18:25:15.737 に答える