propiedades example entries ejemplos bootstrap javascript jquery jquery-datatables

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.

  1. Crear variable para CurrentData
  2. Restablezca CurrentData para vaciar la matriz dentro de fnPreDrawCallback que se dispara antes de que se fnPreDrawCallback la nueva tabla
  3. fnRowCallback da acceso a una matriz de datos para cada fila, inserta esa matriz en la matriz CurrentData
  4. fnDrawCallback después de la tabla procesada, ahora puede acceder a los datos ordenados en la matriz 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) } });

DEMO: http://jsfiddle.net/ne24B/


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.