Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Sumar filas y mostrar resultado en columna final

Estas en el tema de Sumar filas y mostrar resultado en columna final en el foro de Javascript en Foros del Web. Hola buenas noches, ya son las 5 am en santiago, Chile, estuve pensando horas y horas el siguiente problema: Tengo un sistema donde se muestran ...
  #1 (permalink)  
Antiguo 01/12/2015, 01:20
 
Fecha de Ingreso: mayo-2013
Mensajes: 23
Antigüedad: 10 años, 10 meses
Puntos: 0
Sumar filas y mostrar resultado en columna final

Hola buenas noches, ya son las 5 am en santiago, Chile, estuve pensando horas y horas el siguiente problema:

Tengo un sistema donde se muestran las infracciones de vehiculos de acuerdo a su patente y año, en una tabla los encabezados son los años y hacia abajo se muestra el numero de infracción, lo que necesito es sumar los valores de la fila en forma horizontal y mostrar el numero total de infracciones en la ultima columna:

PATENTE | 2011 | 2012 | 2013 | INFRACCIONES

TP031 | 4 | 3 | 6 | [13] -> "TOTAL"
SI0352 | 0 | 3 | 9 | [12]
MP4012 | 0 | 0 | 3 | [3]

Esto debo hacerlo con javascript, ya que desde el servidor no se entrega el número total, debido a que los datos varian en tiempo real.

Código HTML:
Ver original
  1. <table id="infracciones">
  2.     <tr>
  3.         <th>Patente</th>
  4.         <th>2011</th>
  5.         <th>2012</th>
  6.         <th>2013</th>
  7.         <th>Infracciones</th>
  8.     </tr>
  9.     <tr>
  10.         <td>TP031</td>
  11.         <td>4</td>
  12.         <td>3</td>
  13.         <td>6</td>
  14.         <td></td>
  15.     </tr>
  16.         <td>SI0352</td>
  17.         <td>0</td>
  18.         <td>3</td>
  19.         <td>9</td>
  20.         <td></td>
  21.     </tr>
  22.     </tr>
  23.         <td>MP4012</td>
  24.         <td>0</td>
  25.         <td>0</td>
  26.         <td>3</td>
  27.         <td></td>
  28.     </tr>

¿Como se pueden sumar los datos en forma horizontal para cada fila y escribirlos en la ultima columna?

La verdad es que googleado un monton, funciones de jquery como each, eq, etc... he leido, sin embargo no he logrado implementar nada, ni siquiera he encontrado ejemplos al respecto.

Estaria demasiado agradecido si alguien pudiera ayudarme, la verdad llevo horas en esto y se me hace complicado conseguirlo por mi mismo.
  #2 (permalink)  
Antiguo 01/12/2015, 03:18
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: Sumar filas y mostrar resultado en columna final

Una de las tantas formas en que puede hacer esto, consiste en asignar una clase a cada celda final, de tal modo que recorrerías a todas las filas de la tabla, dentro de estas recorres a sus celdas menos a la celda final identificada con la clase asignada al principio y tan solo tendrías que ir acumulando los valores de las celdas previas para finalmente mostrar el resultado en la celda final.

Código Javascript:
Ver original
  1. [].forEach.call(document.querySelectorAll("#infracciones tr"), function(tr){
  2.     var suma = 0;
  3.     [].forEach.call(tr.querySelectorAll("td:not(.clase)"), function(td){
  4.         suma += parseInt(td.innerHTML);
  5.     });
  6.     tr.querySelector(".clase").innerHTML = suma;
  7. });

Un saludo
__________________
«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
  #3 (permalink)  
Antiguo 01/12/2015, 10:22
 
Fecha de Ingreso: mayo-2013
Mensajes: 23
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: Sumar filas y mostrar resultado en columna final

Agradezco muchisimo tu respuesta, hice lo siguiente en html:
Código HTML:
Ver original
  1. <table id="infracciones">
  2.     <tr>
  3.         <th>Patente</th>
  4.         <th>2011</th>
  5.         <th>2012</th>
  6.         <th>2013</th>
  7.         <th>Infracciones</th>
  8.     </tr>
  9.     <tr>
  10.         <td>TP031</td>
  11.         <td>4</td>
  12.         <td>3</td>
  13.         <td>6</td>
  14.         <td class="total"></td>
  15.     </tr>
  16.     <tr>
  17.         <td>SI0352</td>
  18.         <td>0</td>
  19.         <td>3</td>
  20.         <td>9</td>
  21.         <td class="total"></td>
  22.     </tr>
  23.     <tr>
  24.         <td>MP4012</td>
  25.         <td>0</td>
  26.         <td>0</td>
  27.         <td>3</td>
  28.         <td class="total"></td>
  29.     </tr>

y en javascript:

Código Javascript:
Ver original
  1. [].forEach.call(document.querySelectorAll("#infracciones tr"), function(tr){
  2.     var suma = 0;
  3.     [].forEach.call(tr.querySelectorAll("td:not(.total)"), function(td){
  4.         suma += parseInt(td.innerHTML);
  5.     });
  6.     tr.querySelector(".total").innerHTML = suma;
  7. });

Sin embargo obtengo un error que es el siguiente:

Código:
Uncaught TypeError: Cannot set property 'innerHTML' of null
Puedes revisar el código aquí: jsfiddle.net/jp1bx3tu/2/

Aún no logro comprender por que lanza el error, por favor si fueras tan amable nuevamente de ayudarme.

Última edición por evair; 01/12/2015 a las 10:27
  #4 (permalink)  
Antiguo 01/12/2015, 11:39
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: Sumar filas y mostrar resultado en columna final

Hay que corregir dos cosas. La primera de ellas es la primera fila. El algoritmo toma a todas las filas, incluida la primera en la cual no hay elementos <td>. Añade un <thead> y un <tbody>, así definirás a la cabecera y cuerpo de la tabla, para luego recorrer las filas del cuerpo de la tabla. Lo segundo a corregir está en la primera celda de cada fila. Como no es un valor a tomar en cuenta para realizar el cálculo, añádele una clase, de la misma forma que hiciste con la última celda que tampoco es tomada en cuenta para el cálculo; de esta forma, solo se recorrerán a las tres celdas intermedias de cada fila.

Échale un vistazo para que veas cómo queda.

Un saludo
__________________
«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
  #5 (permalink)  
Antiguo 01/12/2015, 18:02
 
Fecha de Ingreso: mayo-2013
Mensajes: 23
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: Sumar filas y mostrar resultado en columna final

Muchisimas gracias por tu tiempo, de verdad, me solucionaste la vida xD bueno como algo extra, estoy intentando acceder al valor de un input de clase notes, por ejemplo hice lo siguiente:

Código Javascript:
Ver original
  1. [].forEach.call(tr.querySelectorAll("td:not(.node):not(.input):not(.promedio), input#notes"), function(td){
  2.  
  3. console.log(td);

Todo va muy bien, el problema es que en el resultado de la consola devuelve:

Código HTML:
Ver original
  1. (index):35 <td>6.6</td>
  2. (index):35 <td>6.6</td>
  3. (index):35 <input id=&#8203;"notes" type=&#8203;"text" class=&#8203;"form-control">
  4. (index):35 <td>6.6</td>
  5. (index):35 <td>6.6</td>
  6. (index):35 <td>6.6</td>
  7. (index):35 <input id=&#8203;"notes" type=&#8203;"text" class=&#8203;"form-control">
  8. (index):35 <td>1.2</td>
  9. (index):35 <td>1.5</td>
  10. (index):35 <td>6.6</td>
  11. (index):35 <input id=&#8203;"notes" type=&#8203;"text" class=&#8203;"form-control">

Devuelve el input entero, y llevo rato intentando acceder a su valor, por favor, es lo ultimo que necesito.

De todas maneras ya con la ayuda anterior, te estoy muy agradecido.

Saludos.
  #6 (permalink)  
Antiguo 01/12/2015, 18:06
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: Sumar filas y mostrar resultado en columna final

Devuelve al elemento porque eso es lo que imprimes. Para acceder al valor de un <input>, debes utilizar la propiedad value del mismo modo en que utilicé la propiedad innerHTML para obtener el valor de cada <td>.

Un saludo
__________________
«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
  #7 (permalink)  
Antiguo 01/12/2015, 21:02
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 8 años, 9 meses
Puntos: 263
Respuesta: Sumar filas y mostrar resultado en columna final

Mira esto que coloque alli, si lo adaptas puede que te sirva:

http://www.forosdelweb.com/f18/calcu...7/#post4761622
__________________
[email protected]
HITCEL
  #8 (permalink)  
Antiguo 02/12/2015, 18:14
 
Fecha de Ingreso: mayo-2013
Mensajes: 23
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: Sumar filas y mostrar resultado en columna final

Cita:
Iniciado por Alexis88 Ver Mensaje
Devuelve al elemento porque eso es lo que imprimes. Para acceder al valor de un <input>, debes utilizar la propiedad value del mismo modo en que utilicé la propiedad innerHTML para obtener el valor de cada <td>.

Un saludo
Muchisimas gracias!! salió todo tal y como lo necesitaba, te agradezco mucho el tiempo para responderme, pude modificar el script y lograr un resultado genial, gracias a la base que me diste.
  #9 (permalink)  
Antiguo 02/12/2015, 18:15
 
Fecha de Ingreso: mayo-2013
Mensajes: 23
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: Sumar filas y mostrar resultado en columna final

Cita:
Iniciado por xfxstudios Ver Mensaje
Mira esto que coloque alli, si lo adaptas puede que te sirva:

[url]http://www.forosdelweb.com/f18/calcular-promedio-notas-lista-captura-proveniente-consulta-1143147/#post4761622[/url]
Gracias!

Etiquetas: columna, filas, final, funcion, resultado, valor
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 14:04.