Richard Deeming
Во-первых, быстрый комментарий: нет никакого смысла использовать $(this)[0]
, так как это просто возвращается this
.
Во-вторых, toLocaleString
метод определяется по типу данных number, но здесь вы пытаетесь вызвать его по строке, возвращаемой из innerHTML
собственность. Я подозреваю, что это просто опечатка в вашем вопросе, иначе у вас была бы другая ошибка.
В-третьих, поскольку вы пытаетесь суммировать числа, вы не должны вызывать toLocaleString
метод внутри цикла. Вы хотите добавить числа к вашему итогу, а не форматированное строковое представление чисел.
Наконец, вы не можете просто добавить текстовое значение к <tbody>
элемент. Вам нужно добавить a <tr>
содержащий <td>
; и вы, вероятно, должны были бы добавить к <tfoot>
раздел.
Попробуйте что-нибудь вроде этого:
$(document).ready(function(){
var total = 0;
$(".Total").each(function(){
var text = this.innerHTML;
var value = parseFloat(text);
if (!isNaN(value)) { total += value; }
console.log(this, text, value);
});
var td = $("<td>").text("Total " + total.toFixed(2));
var tr = $("<tr>").append(td);
var tfoot = $("<tfoot>").append(tr);
$("table").append(tfoot);
});
Я добавил в
console.log
постройте так, чтобы вы могли видеть список значений в консоли вашего браузера, если он все еще не работает.
Richard Deeming
Потому что вы берете сумму значений на текущей странице.
Если вам нужна сумма всех значений, то вам нужно будет сделать это на сервере, где у вас есть все доступные значения.
Richard Deeming
Код, который у вас есть на данный момент, вычисляет общую сумму один раз, когда страница загружается. Он не пересчитывает общую сумму, если вы запускаете какой-то скрипт для добавления новой строки.
Когда вы добавите новую строку,вам нужно будет пересчитать общую сумму.