Recorra la tabla DataTables para obtener el contenido de todas las celdas

3 minutos de lectura

estoy usando jquery tablas de datos para generar la tabla paginada en mi sitio. Necesito ejecutar un proceso que obtenga todos los datos de una columna en particular. Algo como :

$('.testLink').click(function(){
            var cells = new Array();
            $('#myTable tr td').each(function(){
                cells.push($(this).html());
            });
            console.log(cells);
        });

Ese ejemplo toma todo, pero necesitaría solo la información de una columna de tds. Supongo que podría hacerlo agregando una clase a todos los tds en esa fila, pero estoy seguro de que hay una mejor manera. Esa es una pregunta extra..

pero lo que realmente quiero saber es cómo hacer que esto funcione con tablas de datos. Debido a que el script oculta la mayor parte de la tabla para ponerla en paginación, esta función solo toma las celdas que son visibles. jugué con fnGetData pero no lo estoy consiguiendo. ¿Algunas ideas?

  • ¿Qué es objetivo? … obtener datos de fila no es difícil de API y hay ejemplos probables en el enorme paquete de descarga … detalles de publicación e intentos de código

    – charlietfl

    7 de marzo de 2012 a las 19:01

  • sí, obtener todos los datos de fila en una matriz, entonces necesito usar esos datos para ejecutar una consulta. He estado buscando y probando cosas de la API durante horas, pero no puedo conseguirlo, así que quería probar SO.

    – Zac

    7 de marzo de 2012 a las 19:10

avatar de usuario
diego

Para acceder a todas las filas, puede hacer:

var rows = $("#myTable").dataTable().fnGetNodes();

En tu caso, esto debería funcionar:

   $('.testLink').click(function(){
        var cells = [];
        var rows = $("#myTable").dataTable().fnGetNodes();
        for(var i=0;i<rows.length;i++)
        {
            // Get HTML of 3rd column (for example)
            cells.push($(rows[i]).find("td:eq(2)").html()); 
        }
        console.log(cells);
    });

  • Él no quiere todas las filas. Quiere una columna específica en cada nodo.

    – Oh Dios por qué

    7 de marzo de 2012 a las 19:12

  • ¡Sí! Gracias esto es exactamente lo que necesito.

    – Zac

    7 de marzo de 2012 a las 19:26

  • Puedo ver cómo esto responde a la pregunta exacta formulada, pero me pregunto qué quieres hacer con eso. La razón es que se puede realizar una gran cantidad de manipulación de celdas (también filas y columnas) durante el proceso de representación de DataTables utilizando devoluciones de llamada como fnRowCallback.

    – Greg Petit

    7 de marzo de 2012 a las 19:32

  • pero cuando se aplica la clasificación en cualquier columna, su código no proporciona los mismos datos antes de ordenar … lo que creo que está mal …

    – Fahim Parkar

    4 de junio de 2013 a las 12:02

  • ¡Salvó mi vida! Solo quiero agregar si está usando una casilla de verificación en una columna para seleccionar las filas, puede usar esto para obtener el contenido de la fila $(‘input[name=checkboxID]:marcado’, $(“#myDataTable”).dataTable().fnGetNodes()).closest(‘tr’); y luego use la iteración que Andrew publicó. ¡Salud!

    – Matías

    8 de julio de 2015 a las 14:38

avatar de usuario
charlietfl

Aquí hay un método que usa fnGetData()

Primero obtenga los datos del complemento, que serán todas las filas visibles o no. Recorra cada matriz de datos de fila y presione index = 1 (segunda celda) en una nueva matriz

     oTable = $('#example').dataTable();

      var secondCellArray=[];
      $.each( oTable.fnGetData(), function(i, row){
          secondCellArray.push( row[1]);
    })

     console.log( secondCellArray)

EDITAR: demostración de trabajo … busque en la consola después de renderizar

http://live.datatables.net/apixiv/edit#javascript,html

avatar de usuario
traficante de llamas

jQuery.map combinado con fnGetData() lo convierte en una solución compacta. La siguiente función devolverá una matriz unidimensional que contiene todos los valores de obj_dtable‘s nª columna:

function getDataTableColumn(obj_dtable,n) {
    return $.map(obj_dtable.fnGetData(), function(val) {
        return val[n];
    });
};

Querrás usar el selector “EQ”. Comienza en el índice de “0”, por lo que si tiene …

<tr>
  <td>0</td>
  <td>1</td>
  <td>2</td>
  <td>3</td>
</tr>

Entonces usando

 $("td").eq(3); // last one
 $("td").eq(2); //returns "2"

¿Tener sentido?

http://api.jquery.com/eq-selector/

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad