Usando jquery para obtener los totales por fila y el total general de la tabla

Así que la versión corta de esto es: ¿Puedo atravesar solo los elementos dentro del elemento coincidente de los selectores antes de laeach()? ¿O hay una forma más sencilla de obtener lo que quiero sin uneach() ¿lazo?

Pensé que esto sería mucho más fácil, lo que me hace pensar que me estoy perdiendo algún principio fundamental de los elementos que atraviesan jQuery.

Así que aquí está el escenario:

Tengo una tabla (y es apropiada en este caso), donde cada celda tiene un textoinput. La última entrada es de solo lectura y se supone que es la suma total de los otros valores ingresados ​​en esa fila. Tengo un script js realmente desordenado para encontrar tanto los totales de cada fila como el total general de cada fila.

Aquí está el HTML básico:

<table>
<thead>
<tr><th>Col 1</th><th>Col 2</th><th>Col 3</th><th>Total</th></tr>
</thead>
<tbody>
<tr id="row1"><td><input type="text" /></td><td><input type="text" /></td><td><input type="text" /></td><td class="total"><input type="text" readonly="readonly" /></td></tr>
<tr id="row2"><td><input type="text" /></td><td><input type="text" /></td><td><input type="text" /></td><td class="total"><input type="text" readonly="readonly" /></td></tr>
<tr id="row3"><td><input type="text" /></td><td><input type="text" /></td><td><input type="text" /></td><td class="total"><input type="text" readonly="readonly" /></td></tr>
</tbody>
</table>

El javascript validará que los datos ingresados ​​son numéricos, solo para ser claros.

Así que tengo un oyente de eventos para cada entrada paraonchange que actualiza el total cuando el usuario ingresa datos y se mueve a la siguiente celda / entrada. Entonces tengo una función llamadaupdateTotal que actualmente usafor los bucles para recorrer cada fila y dentro de ese bucle, cada celda, y finalmente establecen la entrada en la celda total a sumar.

Nota rápida: he incluido el siguiente código para demostrar que no solo estoy buscando una ayuda y para demostrar la lógica básica de lo que tengo en mente. Por favor, siéntase libre de ojear o omitir esta parte. Funciona y no necesita ninguna depuración o crítica.

Esto es lo que parece:

function updateTotal() {
    table = document.getElementsByTagName("tbody")[0];
    allrows = table.getElementsByTagName("tr");
    grandtotal = document.getElementById("grand");
    grandtotal.value = "";

    for (i = 0; i < allrows.length; i++) {
        row_cells = allrows[i].getElementsByTagName("input");
        row_total = allrows[i].getElementsByTagName("input")[allrows.length - 2];
        row_total.value = "";

        for (ii = 0; ii < row_cells.length - 1; ii++) {
            row_total.value = Number(row_total.value) + Number(row_cells[i][ii].value);
            grandtotal.value = Number(grandtotal.value) + Number(row_cells[i][ii].value);
        }
    }
}

Ahora estoy tratando de volver a escribir lo anterior con la sintaxis de jquery, pero me estoy quedando atascado. Pensé que la mejor manera de ir sería usareach() bucles a lo largo de las líneas de:

function findTotals() {
$("tbody tr").each(function() {
    row_total = 0; 
    $($(this) + " td:not(.total) input:text").each(function() {
        row_total += Number($(this).val());
        }); 
    $($(this) + " .total :input:text").val(row_total);
});

}

Pero usando$(this) No parece funcionar de la manera que yo pensaba. Leí y vi que el uso de$(this) en un bucle, cada bucle apunta a cada elemento coincidente, que es lo que esperaba, pero no entiendo cómo puedo atravesar ese elemento en la función each (). Lo anterior también omite el bit grand_total, porque estaba teniendo aún menos suerte con el funcionamiento de la variable del gran total. Intenté lo siguiente para obtener los row_totals:

 $($(this).attr("id") + " td:not(.total) input:text").each(function() {

con cierto éxito, pero luego logré romperlo cuando intenté agregarlo. No creo que necesitaría cada fila para tener una identificación para hacer que esto funcione, ya que cada parte debe apuntar a la fila que tengo en mente.

Así que la versión corta de esto es: ¿Puedo usar cada bucle para atravesar solo los elementos dentro de las coincidencias, y si es así, cuál es la sintaxis correcta? ¿O hay una forma más sencilla de obtener lo que quiero sin un bucle de cada uno?

Oh, un último pensamiento ...

¿Es posible obtener la suma numérica (en oposición a una cadena larga) de todos los elementos emparejados con jQuery? Investigaré esto más a mí mismo, pero si alguien lo sabe, haría esto mucho más fácil.

Respuestas a la pregunta(2)

Su respuesta a la pregunta