Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Pasar datos de tabla html a otra

Estas en el tema de Pasar datos de tabla html a otra en el foro de Javascript en Foros del Web. Buenas una consulta, como pasar cierta filas de una tabla html a otra tabla, a partir de una selección de filas. tengo una tabla html ...
  #1 (permalink)  
Antiguo 24/08/2017, 21:41
 
Fecha de Ingreso: abril-2011
Mensajes: 19
Antigüedad: 13 años
Puntos: 1
Pasar datos de tabla html a otra

Buenas una consulta, como pasar cierta filas de una tabla html a otra tabla, a partir de una selección de filas.

tengo una tabla html que llena desde una consulta php. la idea es seleccionar ciertas filas y pasarlas a una nueva tabla html para guardar esa nueva tabla html en la bd
  #2 (permalink)  
Antiguo 25/08/2017, 01:51
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Pasar datos de tabla html a otra

Puedes apoyarte en el evento click de tal manera que se ejecute una función por cada vez que se pulse una celda. En dicha función necesitarás obtener a las celdas constituyentes de la fila a la cual pertenece la celda pulsada para así acceder a sus valores y copiarlos. Para buscar elementos ancestros, utiliza la propiedad parentNode.

Si deseas seleccionar varias filas, por ejemplo, pulsando la tecla Ctrl, Alt o Shift junto a un clic del botón izquierdo del ratón, el objeto del evento tiene las propiedades ctrlKey, altKey y shiftKey para cada caso. Otra forma quizá más práctica consiste en utilizar valores para cada fila, de tal forma que se asignaría un valor X cada vez que la fila esté seleccionada y un valor Y cuando se le quite la selección. Para esto último solo serían necesarios simples clics.

Finalmente, cuando ya hayas obtenido los valores en cuestión, tan solo tendrás que añadir filas y columnas a la otra tabla, para lo cual puedes utilizar los métodos insertRow() e insertCell(), respectivamente.

Este es un ejemplo de dos tablas cuyos id son "one" y "two", siendo "one" la que contiene los datos y "two" la que los recibirá. También hay un botón que disparará la ejecución de una función que realizará la copia de los datos:
Código Javascript:
Ver original
  1. var oneTbody = document.querySelector("#one tbody"), //Cuerpo de la primera tabla
  2.     twoTbody = document.querySelector("#two tbody"), //Cuerpo de la segunda tabla
  3.     copy = document.querySelector("#copy"), //Botón que copiará los datos de las filas seleccionadas
  4.     seleccion = [], //Arreglo que almacenará a las filas seleccionadas
  5.     seleccionar = function(event){ //Función a ejecutarse para seleccionar una fila
  6.         if (event.target.tagName == "TD"){ //Si se pulsó una celda
  7.             var fila = event.target.parentNode; //Se almacena en una variable a la fila que la contiene
  8.            
  9.             //Si no está seleccionada
  10.             if (fila.dataset.selected < 1){
  11.                 fila.style.backgroundColor = "red"; //Se la pinta de rojo
  12.                 fila.style.color = "white"; //Con un texto en blanco
  13.                 fila.dataset.selected = 1; //Se asigna el valor 1 al pseudoatributo "data-selected"
  14.                 seleccion.push(fila); //Se añade la fila al arreglo de filas seleccionadas
  15.             }
  16.             //Si está seleccionada
  17.             else{
  18.                 fila.style.backgroundColor = ""; //Se retira el color de fondo
  19.                 fila.style.color = ""; //Y el del texto
  20.                 fila.dataset.selected = 0; //El valor del pseudoatributo retorna a 0
  21.                 seleccion.splice(seleccion.indexOf(fila), 1); //Se elimina la fila del arreglo 
  22.             }          
  23.         }
  24.     },
  25.     copiar = function(){ //Función a ejecutarse para copiar los datos de las filas seleccionadas en la segunda tabla
  26.         if (seleccion.length){ //Si hay filas seleccionadas
  27.             for (var i = 0, l = seleccion.length; i < l; i++){ //Se recorre a dicho conjunto
  28.                 var tr = twoTbody.insertRow(), //Se inserta una nueva fila en la segunda tabla
  29.                     celdas = seleccion[i].querySelectorAll("td"); //Se toma a las celdas de la fila seleccionada actual en el bucle
  30.  
  31.                 for (var j = 0, m = celdas.length; j < m; j++){ //Se recorre a dicho conjunto de celdas
  32.                     var td = tr.insertCell(); //Se añade una nueva celda en la nueva fila de la segunda tabla
  33.                     td.innerHTML = celdas[j].innerHTML; //Se copia el texto de la celda de la fila seleccionada a la nueva celda
  34.                 }
  35.  
  36.                 //La fila seleccionada retorna a su estado inicial
  37.                 seleccion[i].style.backgroundColor = "";
  38.                 seleccion[i].style.color = "";
  39.                 seleccion[i].dataset.selected = 0;
  40.             }
  41.  
  42.             //Se eliminan a las filas seleccionadas del arreglo
  43.             seleccion.length = 0;
  44.         }
  45.     };
  46.    
  47. //Cuando se produzca el evento "click" en la primera tabla, se ejecutará la función "callback"
  48. oneTbody.addEventListener("click", seleccionar, false);
  49.  
  50. //Cuando se pulse el botón, se ejecutará el siguiente conjunto de instrucciones
  51. copy.addEventListener("click", copiar, false);

DEMO

Hay algunas líneas de código que pueden optimizarse. Lo he dejado tal cual para que pueda entenderse en un nivel más básico debido a que más personas lo verán, pero puedes modificar el script a tu gusto y conveniencia.

__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Última edición por Alexis88; 25/08/2017 a las 02:20 Razón: Comentarios
  #3 (permalink)  
Antiguo 25/08/2017, 21:17
 
Fecha de Ingreso: abril-2011
Mensajes: 19
Antigüedad: 13 años
Puntos: 1
Respuesta: Pasar datos de tabla html a otra

Estimado muchas gracias me sirvió, coloque el primero en un modal y lleva los datos al otro tabla sin ningún problema.
también le coloque un botón para poder eliminar en el caso de agregar algún incorrecto.

Luego le muestro el código, para cualquier observación de su parte.
  #4 (permalink)  
Antiguo 31/10/2017, 16:59
 
Fecha de Ingreso: abril-2011
Mensajes: 19
Antigüedad: 13 años
Puntos: 1
Respuesta: Pasar datos de tabla html a otra

Estimado como puedo hacer para que ya aparezcan marcadas o que se marquen todas con algún método, para des-seleccionar las que no se necesiten y pasar las que queden marcadas
  #5 (permalink)  
Antiguo 31/10/2017, 19:36
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Pasar datos de tabla html a otra

Si deseas seleccionar automáticamente todas las filas, tendrías que utilizar el bloque de instrucciones de la estructura if dentro de un bucle que recorra a todas las filas para que así se seleccione cada una. Podrías colocar todo eso en una función que se ejecutaría luego de cargar el DOM.

Código Javascript:
Ver original
  1. document.addEventListener("DOMContentLoaded", function(){
  2.     var filas = document.querySelectorAll("#one tbody tr");
  3.  
  4.     [].forEach.call(filas, function(fila){
  5.         fila.style.backgroundColor = "red";
  6.         fila.style.color = "white";
  7.         fila.dataset.selected = 1;
  8.         seleccion.push(fila);
  9.     });
  10. });

El arreglo seleccion es el mismo del ejemplo anterior. Este último ejemplo tendría que ser añadido al anterior.

__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Etiquetas: html, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:24.