Ver Mensaje Individual
  #9 (permalink)  
Antiguo 23/07/2015, 14:21
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: Al ejecutar RemoveChild restar valor al total

Tienes que volver a tomar el valor de la celda de la fila a eliminar pues lo que hiciste en la función "Calcular" fue tomar el valor de cada celda e ir reemplazándolo en cada vuelta.

En realidad, lo que buscas hacer, no es difícil.

Código HTML:
Ver original
  1. <table id = "productos">
  2.     <thead>
  3.         <tr>
  4.             <th>Producto</th>
  5.             <th>Costo</th>
  6.             <th>Opción</th>
  7.         </tr>
  8.     </thead>
  9.     <tbody>
  10.         <tr>
  11.             <td>Manzana</td>
  12.             <td class = "costo">12.57</td>
  13.             <td>
  14.                 <label>Eliminar</label>
  15.             </td>
  16.         </tr>
  17.         <tr>
  18.             <td>Sandía</td>
  19.             <td class = "costo">35.41</td>
  20.             <td>
  21.                 <label>Eliminar</label>
  22.             </td>
  23.         </tr>
  24.         <tr>
  25.             <td>Melón</td>
  26.             <td class = "costo">18.35</td>
  27.             <td>
  28.                 <label>Eliminar</label>
  29.             </td>
  30.         </tr>
  31.         <tr>
  32.             <td id = "total" colspan = "3"></td>
  33.         </tr>
  34.     </tbody>

Código Javascript:
Ver original
  1. //Al cargar el documento, ejecutaremos lo siguiente
  2. document.addEventListener("DOMContentLoaded", function(){
  3.     var tbody = document.querySelector("#productos tbody"), //El cuerpo de la tabla
  4.         total = tbody.querySelector("#total"), //La celda del total
  5.         fila, //Variable a utilizar para almacenar una fila
  6.         valor, //El valor de la celda del costo de la fila a eliminar
  7.         suma = 0; //La variable acumuladora
  8.    
  9.     //Recorremos al conjunto de celdas con la clase "costo"
  10.     [].forEach.call(tbody.querySelectorAll(".costo"), function(costo){
  11.         //Y acumulamos sus valores
  12.         suma += parseFloat(costo.innerHTML);
  13.     });
  14.    
  15.     //Fijamos el valor del acumulado a dos decimales
  16.     suma = suma.toFixed(2);
  17.    
  18.     //Mostramos el acumulado en la celda del total
  19.     total.innerHTML = "Total: " + suma;
  20.    
  21.     //Recorremos al conjunto de opciones "Eliminar"
  22.     [].forEach.call(tbody.querySelectorAll("label"), function(opcion){
  23.         //Cuando se dé un clic en alguna de ellas, ejecutaremos una función
  24.         opcion.addEventListener("click", function(){
  25.             //Tomamos a la fila que contiene al botón pulsado
  26.             fila = this.parentNode.parentNode;
  27.            
  28.             //Tomamos al valor de la celda del costo de esta fila
  29.             valor = fila.querySelector(".costo").innerHTML;
  30.            
  31.             //Actualizamos el valor de la variable acumuladora
  32.             suma -= parseFloat(valor);
  33.            
  34.             //Fijamos el valor del acumulado a dos decimales
  35.             suma = suma.toFixed(2);
  36.            
  37.             //Actualizamos el valor de la celda del total
  38.             total.innerHTML = "Total: " + suma;
  39.            
  40.             //Eliminamos la fila de la tabla
  41.             tbody.removeChild(fila);
  42.         }, false);
  43.     });
  44. }, false);

DEMO

La explicación está en los comentarios. Disculpa la extensión del ejemplo pero lo hice de esa manera para que veas el paso a paso al detalle. Si tienes alguna duda, pregúntame.

Saludos
__________________
«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