Ver Mensaje Individual
  #2 (permalink)  
Antiguo 25/08/2017, 01:51
Avatar de Alexis88
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