Получить данные от Datatables.net после сортировки

Я использую Datatables для отображения некоторых данных. У меня также есть входные данные, которые используются для добавления новой строки в данные. Когда я добавляю эту строку, я повторно инициализирую таблицу, и она автоматически сортирует новую строку в соответствии с правилами сортировки, которые я ей даю. Мой вопрос таков: есть ли способ получить данные из таблицы в том порядке, в настоящее время рассматривается? Всякий раз, когда я пытаюсь ... $('#tableCompetitors').dataTable().fnGetData(), он дает мне данные в порядке, в котором он был добавлен в таблицу, а не в порядке, в котором он представлен в.

Итак, существует ли простой способ сделать то, что я хочу?

P. S. Если это поможет. Исходный источник данных представляет собой массив массивов, предоставляемых из текстового поля. Я анализирую его, помещаю в массив, а затем использую этот массив в качестве источника данных.

3 ответов


вот одно решение, использующее 3 обратных вызова API.

  1. создать переменную для CurrentData
  2. сброс CurrentData очистить массив внутри fnPreDrawCallback который срабатывает перед отображением новой таблицы
  3. fnRowCallback дает доступ к массиву данных для каждой строки, нажать массива в CurrentData array
  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/


я наткнулся на это с тем же вопросом. Хотя принятое решение может работать, я нашел лучший способ:

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

посмотреть селектора-модификатора документация для получения дополнительной информации.


просто пытаюсь дать вам другой вариант.

следующие получат все строки в таблице, даже если они отфильтрованы:

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 цента.