javascript - entries - jquery table example
Obtenga datos de Datatables.net después de ordenar (3)
Estoy usando Datatables para mostrar algunos datos. También tengo entradas que se utilizan para agregar una nueva fila a los datos. Cuando agrego esta fila, reinicio la tabla y ordena automáticamente la nueva fila de acuerdo con las reglas de clasificación que le doy. Mi pregunta es esta: ¿hay alguna manera de obtener los datos de la tabla en el orden en que se están viendo actualmente? Cada vez que pruebo $(''#tableCompetitors'').dataTable().fnGetData()
, me da los datos en el orden en que se agregaron a la tabla, no en el orden en que se presentan.
Entonces, ¿hay una manera fácil de hacer lo que quiero?
PD: si ayuda. El origen de datos original es una matriz de matrices que se proporciona desde un cuadro de texto. Lo analizo, lo inserto en una matriz y luego uso esa matriz como fuente de datos.
Aquí hay una solución que usa 3 devoluciones de llamada API.
- Crear variable para
CurrentData
- Restablezca
CurrentData
para vaciar la matriz dentro defnPreDrawCallback
que se dispara antes de que sefnPreDrawCallback
la nueva tabla -
fnRowCallback
da acceso a una matriz de datos para cada fila, inserta esa matriz en la matrizCurrentData
-
fnDrawCallback
después de la tabla procesada, ahora puede acceder a los datos ordenados en la matrizCurrentData
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)
}
});
Solo estoy tratando de darle otra opción.
Lo siguiente obtendrá todas las filas en la tabla, incluso si se filtran:
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());
});
o si solo quiere los resultados que coinciden con el filtro, entonces:
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 contendrá la lista ordenada de los datos de la primera columna.
Editar: para obtener todo el texto de la fila en la matriz.
$(row + " td").each(function(index, tdData){
currData.push($(tdData).text());
});
o
$(row).children().each(function(index, tdData){
currData.push($(tdData).text());
});
De esta forma, tienes un poco más de control sobre lo que la matriz puede contener. Mis 2 centavos.
Me encontré con esto con la misma pregunta. Si bien la solución aceptada puede funcionar, encontré una mejor manera:
$("example").DataTable().rows({search:''applied''}).data()
Vea la documentación del modificador de selector para más información.