How to get table row data on button click?

Obtén Datos de Filas de Tabla al Clic con Javascript

hace 10 años

★★★★★Valoración: 4.84 (5556 votos)

En el desarrollo web moderno, la interactividad con el usuario es clave para crear experiencias atractivas y eficientes. Una tarea común es la de capturar información específica cuando un usuario interactúa con una tabla de datos. Ya sea al hacer clic en un botón dentro de una fila o al seleccionar la fila completa, obtener los datos asociados a esa acción es fundamental para procesarlos o enviarlos al servidor. En este artículo, exploraremos diversas técnicas para lograr esto, utilizando tanto JavaScript puro como la popular librería jQuery DataTables. Aprenderás a implementar estas funcionalidades paso a paso, con ejemplos prácticos y explicaciones detalladas.

Índice de Contenido

Obtener Datos de Filas de Tabla con JavaScript Vanilla (Puro)

Para escenarios donde no se requiere la potencia de una librería como jQuery DataTables, o simplemente prefieres mantener la simplicidad del JavaScript puro, es perfectamente posible obtener los datos de una fila al hacer clic en un botón. La clave reside en estructurar correctamente tu tabla HTML y utilizar JavaScript para capturar el evento de clic y acceder a los atributos de datos de la fila correspondiente.

How to get clicked row data in jQuery DataTable?
EXAMPLES , Get the data for a single row when clicked upon: var table = new DataTable('#myTable'); $('#example tbody').on('click', 'tr', function () { console.log(table.row(this).data()); }); , Increase a counter when a row is clicked on: ... , Update all rows in the table, redrawing only when complete:

Estructura HTML: La Base de la Información

El primer paso es definir una estructura HTML para tu tabla que facilite el acceso a los datos desde JavaScript. Una práctica recomendada es utilizar atributos data-* en las filas (<tr>) para almacenar la información relevante. Cada atributo data-* puede representar una columna de datos. Además, dentro de cada fila, incluiremos un botón que el usuario podrá ক্লিকar para activar la extracción de datos.

A continuación, un ejemplo de estructura HTML:

<table border="1"> <thead> <tr> <th>Nombre</th> <th>Email</th> <th>Acción</th> </tr> </thead> <tbody> <tr data-name="John Doe" data-email="[email protected]"> <td>John Doe</td> <td>[email protected]</td> <td><button onclick="handleButtonClick(this)">Enviar Datos</button></td> </tr> <tr data-name="Jane Smith" data-email="[email protected]"> <td>Jane Smith</td> <td>[email protected]</td> <td><button onclick="handleButtonClick(this)">Enviar Datos</button></td> </tr> <!-- Agrega más filas según sea necesario --> </tbody> </table> 

Observa cómo cada fila <tr> tiene atributos data-name y data-email. Estos atributos almacenan el nombre y el correo electrónico correspondientes a esa fila. El botón dentro de la celda de "Acción" tiene un atributo onclick que llama a la función JavaScript handleButtonClick(this), pasando la referencia al botón ক্লিকado (this).

Función JavaScript handleButtonClick(): El Corazón de la Interacción

Ahora, necesitamos la función JavaScript handleButtonClick() para procesar el clic del botón y extraer los datos de la fila. Esta función recibirá como argumento el botón ক্লিকado (button).

<script> function handleButtonClick(button) { // Accediendo a los datos de la fila utilizando los atributos data-* const name = button.parentNode.parentNode.dataset.name; const email = button.parentNode.parentNode.dataset.email; // Simula el envío de datos (aquí puedes realizar una petición AJAX) console.log(`Enviando datos: Nombre - ${name}, Email - ${email}`); // Aquí iría tu código para enviar los datos al servidor o procesarlos } </script> 

Explicación del Código JavaScript

  • button.parentNode.parentNode: En JavaScript, parentNode te permite acceder al elemento padre de un nodo HTML. En este caso, button.parentNode se refiere a la celda <td> que contiene el botón, y button.parentNode.parentNode accede a la fila <tr> contenedora.
  • .dataset: El objeto dataset es una propiedad de los elementos HTML que te permite acceder a todos los atributos data-* definidos en ese elemento.
  • .dataset.name y .dataset.email: Utilizamos .dataset.name y .dataset.email para acceder a los valores de los atributos data-name y data-email de la fila <tr>, respectivamente.
  • console.log(...): En el ejemplo, simplemente mostramos los datos en la consola del navegador. En una aplicación real, reemplazarías esta línea con el código necesario para enviar los datos al servidor, por ejemplo, utilizando una petición AJAX (fetch o XMLHttpRequest).

Obtener Datos de Filas Seleccionadas en DataTables de jQuery

jQuery DataTables es una potente librería que añade funcionalidades avanzadas a las tablas HTML, como paginación,排序, búsqueda y selección de filas. Si estás utilizando DataTables, obtener los datos de las filas seleccionadas se vuelve aún más sencillo gracias a su API.

How to make jQuery DataTable row clickable?
$('. dataTable'). on('click', 'tbody tr', function() { var data = table. row(this).

Selección de Filas en DataTables

DataTables ofrece varias opciones para la selección de filas. Una forma sencilla es utilizar eventos de clic para añadir o eliminar una clase CSS a las filas seleccionadas. Luego, podemos usar la API de DataTables para obtener los datos de estas filas.

Usando rows().data()

El método rows().data() de DataTables es esencial para recuperar los datos de las filas. Cuando se utiliza con un selector de filas (como las filas seleccionadas), devuelve un objeto DataTables API que contiene los datos de esas filas. En nuestro caso, podemos usarlo para obtener los datos de las filas que hemos marcado como seleccionadas.

Ejemplo de Conteo de Filas Seleccionadas (Adaptado)

Aunque el ejemplo original se centra en contar filas seleccionadas, podemos adaptarlo fácilmente para obtener los datos. Primero, necesitamos inicializar DataTables en nuestra tabla y habilitar la selección de filas (por ejemplo, añadiendo una clase al hacer clic en una fila).

<table id="miTabla" class="display" style="width:100%"> <thead> <tr> <th>Nombre</th> <th>Posición</th> <th>Oficina</th> <th>Edad</th> <th>Fecha de inicio</th> <th>Salario</th> </tr> </thead> <tbody> <tr> <td>Tiger Nixon</td> <td>System Architect</td> <td>Edinburgh</td> <td>61</td> <td>2011/04/25</td> <td>$320,800</td> </tr> <tr> <td>Garrett Winters</td> <td>Accountant</td> <td>Tokyo</td> <td>63</td> <td>2011/07/25</td> <td>$170,750</td> </tr> <!-- ... más filas ... --> </tbody> </table> <script> $(document).ready(function () { var table = $('#miTabla').DataTable(); $('#miTabla tbody').on('click', 'tr', function () { $(this).toggleClass('selected'); // Añade/elimina la clase 'selected' var selectedData = table.rows('.selected').data().toArray(); // Obtiene datos de filas con clase 'selected' en array console.log(selectedData); // Muestra los datos seleccionados en consola }); }); </script> 

En este ejemplo:

  • Inicializamos DataTables en la tabla con ID miTabla.
  • Capturamos el evento click en las filas del <tbody> de la tabla.
  • Con $(this).toggleClass('selected'), añadimos o eliminamos la clase selected a la fila ক্লিকada, cambiando su estado de selección visualmente.
  • table.rows('.selected').data().toArray(): Esta línea es clave. table.rows('.selected') selecciona todas las filas que tienen la clase selected. .data() obtiene los datos de estas filas como un objeto DataTables API. .toArray() convierte este objeto en un array de arrays, donde cada array interno representa los datos de una fila seleccionada.
  • console.log(selectedData) muestra en la consola un array con los datos de todas las filas seleccionadas.

Filas Clickables en DataTables de jQuery y Obtención de Datos

Otra necesidad común es hacer que toda la fila de una DataTables sea clickable, en lugar de solo un botón. Al hacer clic en cualquier parte de la fila, podemos activar una acción, como mostrar los detalles de ese registro o navegar a otra página con información relacionada.

Haciendo Filas Clickables

Hacer filas clickables en DataTables es muy sencillo. Podemos usar el mismo evento click en las filas del <tbody> que vimos en el ejemplo anterior.

How to get table row data on button click?
JavaScript Function: The handleButtonClick function handles the button click and retrieves row data from the associated

element. Button Event Handling: The button uses the onclick attribute to call handleButtonClick, passing this to identify the clicked button's row.

Obteniendo Datos al Clic

Para obtener los datos de la fila क्लिकada, utilizaremos nuevamente el método row().data() de DataTables, pero esta vez, lo aplicaremos a la fila específica que ha sido ক্লিকada.

Ejemplo con row().data()

<script> $(document).ready(function () { var table = $('#miTabla').DataTable(); $('#miTabla tbody').on('click', 'tr', function () { var dataFila = table.row(this).data(); // Obtiene los datos de la fila ক্লিকada console.log(dataFila); // Muestra los datos en consola // Aquí podrías realizar una petición AJAX con dataFila // o abrir un enlace en una nueva pestaña // window.open("enlace-destino?id=" + dataFila[0]); // Ejemplo para abrir un enlace con el primer dato como ID }); }); </script> 

En este ejemplo:

  • table.row(this).data(): table.row(this) crea un objeto DataTables API que representa la fila <tr> que ha sido ক্লিকada (this dentro del contexto del evento de clic se refiere al elemento <tr>). .data() luego extrae los datos de esa fila específica.
  • console.log(dataFila) muestra los datos de la fila 클릭ada en la consola. dataFila será un array (o un objeto, dependiendo de cómo se hayan definido los datos en DataTables) conteniendo los datos de cada columna de la fila.
  • El comentario // Aquí podrías realizar una petición AJAX... indica dónde podrías añadir código para enviar los datos al servidor usando AJAX o para abrir un enlace relacionado con la fila ক্লিকada. El ejemplo window.open(...) muestra cómo abrir un enlace en una nueva pestaña, pasando el primer dato de la fila como parámetro (por ejemplo, un ID).

Profundizando en row().data() en DataTables

El método row().data() es una herramienta fundamental en DataTables para interactuar con los datos de las filas. Vamos a explorarlo con más detalle.

¿Qué es row().data()?

row().data() es un método de la API de DataTables que te permite tanto obtener como establecer los datos de una fila específica. Se utiliza en conjunto con el selector row(), que te permite seleccionar una fila en la tabla (por índice, por nodo DOM, etc.).

Obtener Datos (row().data() sin parámetros)

Cuando se utiliza row().data() sin ningún parámetro, devuelve los datos asociados a la fila seleccionada por el selector row(). El formato de los datos devueltos (array u objeto) dependerá de cómo se hayan configurado los datos en DataTables (por ejemplo, si se usaron arrays o objetos JSON como fuente de datos).

How to get selected row data in DataTable?
This can be done by simply using a click event to add / remove a class on the table rows. The rows(). data()DT method can then be used to get the data for the selected rows. In this case it is simply counting the number of selected rows, but much more complex interactions can easily be developed.
var dataDeLaFila = table.row(2).data(); // Obtiene los datos de la tercera fila (índice 2) console.log(dataDeLaFila); 

Establecer Datos (row().data(d) con parámetro)

También puedes usar row().data(d) para modificar los datos de una fila. Donde d es el nuevo conjunto de datos que quieres asignar a la fila. Es importante recordar que al modificar los datos con row().data(d), DataTables no redibuja la tabla inmediatamente. Para que los cambios se visualicen en la tabla, debes llamar al método draw() después de establecer los nuevos datos.

var dataDeLaFila = table.row(0).data(); // Obtiene los datos de la primera fila dataDeLaFila[2] = "Nueva Oficina"; // Modifica el tercer elemento del array de datos (columna 'Oficina') table.row(0).data(dataDeLaFila).draw(); // Establece los nuevos datos y redibuja la tabla 

Ejemplos de Uso Avanzado

El método row().data() puede utilizarse en combinación con otros métodos de la API de DataTables para realizar operaciones más complejas. Por ejemplo, puedes iterar sobre todas las filas de la tabla usando rows().every() y modificar los datos de cada fila individualmente, y luego redibujar la tabla una sola vez al final para optimizar el rendimiento.

var table = $('#miTabla').DataTable(); table.rows().every(function () { var data = this.data(); data[5] = parseFloat(data[5].replace('$', '').replace(',', '')) * 1.10; // Incrementa el salario en un 10% this.data(data); // Actualiza los datos de la fila this.invalidate(); // Invalida los datos cacheados para esta fila (optimización) }); table.draw(); // Redibuja la tabla una vez que todas las filas han sido actualizadas 

En este ejemplo avanzado, incrementamos el salario de cada empleado en un 10% y luego redibujamos la tabla. this.invalidate() es una optimización que indica a DataTables que los datos de esta fila han cambiado, pero no fuerza una redibujado inmediato, lo que mejora el rendimiento cuando se realizan múltiples actualizaciones.

Conclusión

Obtener datos de filas de tablas al hacer clic es una funcionalidad esencial en muchas aplicaciones web interactivas. Como hemos visto, tanto JavaScript puro como jQuery DataTables ofrecen herramientas poderosas para lograr esto. JavaScript vanilla te proporciona control directo sobre el DOM y es ideal para casos sencillos o cuando se busca minimizar dependencias. jQuery DataTables, por otro lado, simplifica enormemente la gestión de tablas complejas y ofrece una API rica y flexible para la manipulación de datos y la interacción del usuario. La elección entre una u otra técnica dependerá de las necesidades específicas de tu proyecto y de la complejidad de las tablas y las interacciones requeridas. Dominar estas técnicas te permitirá crear interfaces web más dinámicas y responsivas, mejorando la experiencia del usuario y la eficiencia de tus aplicaciones.

Subir