Получить данные от Datatables.net после сортировки
Я использую Datatables для отображения некоторых данных. У меня также есть входные данные, которые используются для добавления новой строки в данные. Когда я добавляю эту строку, я повторно инициализирую таблицу, и она автоматически сортирует новую строку в соответствии с правилами сортировки, которые я ей даю. Мой вопрос таков: есть ли способ получить данные из таблицы в том порядке, в настоящее время рассматривается? Всякий раз, когда я пытаюсь ...
$('#tableCompetitors').dataTable().fnGetData()
,
он дает мне данные в порядке, в котором он был добавлен в таблицу, а не в порядке, в котором он представлен в.
Итак, существует ли простой способ сделать то, что я хочу?
P. S. Если это поможет. Исходный источник данных представляет собой массив массивов, предоставляемых из текстового поля. Я анализирую его, помещаю в массив, а затем использую этот массив в качестве источника данных.
3 ответов
вот одно решение, использующее 3 обратных вызова API.
- создать переменную для
CurrentData
- сброс
CurrentData
очистить массив внутриfnPreDrawCallback
который срабатывает перед отображением новой таблицы -
fnRowCallback
дает доступ к массиву данных для каждой строки, нажать массива вCurrentData
array -
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)
}
});
я наткнулся на это с тем же вопросом. Хотя принятое решение может работать, я нашел лучший способ:
$("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 цента.