#javascript #jquery
Вопрос:
Я пытаюсь суммировать все столбцы, кроме первого столбца. Мой HTML-код таков;
<div id="TableDetails">
<table id="detailTable" style="width:100%">
<thead>
<tr>
<th>Popname</th>
<th>Expense</th>
<th>Income</th>
<th>Margin</th>
<th>Margin Profit</th>
<th>Time</th>
</tr>
</thead>
<tbody id="details">
</tbody>
<tfoot id="totalValues">
<tr>
<th>Total: </th>
<th id="totalofIncome"></th>
<th id="totalofExpense"></th>
<th id="totalofMargin"></th>
<th id="totalofMarginProfit"></th>
<th id="totalofTime"></th>
</tr>
</tfoot>
</table>
</div>
И я заполняю тело с помощью цикла for, как это в jquery
for (var i = 0; i < result.Data.length; i ) {
data = '<tr>'
'<td> ' result.Data[i].Popname '</td>'
'<td> ' parseFloat(result.Data[i].Income.replace(",", ".")) '</td>'
'<td>' parseFloat(result.Data[i].Expense.replace(",", ".")) '</td>'
'<td>' parseFloat(result.Data[i].Profit.replace(",", ".")) '</td>'
'<td>' parseFloat(result.Data[i].ProfitMargin.replace(",", ".")) '</td>'
'<td>' parseFloat(result.Data[i].Time.replace(",", ".")) '</td>'
'</tr>';
}
$("#details").empty().append(data);
Я заменяю «,» на «.» для суммы как двойной.Значение всегда приходит с «x.xx» Я прочитал много тем, посмотрел много видео, но не могу понять это. Какая-нибудь помощь?
var table = $("#details");
var totalIncome = 0, // etc for the others
$(table).find('td').not(":first").each(function () {
totalIncome = parseFloat(this.val());
})
Я хочу суммировать все столбцы, кроме popname, который является первым столбцом
Комментарии:
1. В идентификаторе <th id=»totalExpense»> отсутствует закрывающая кавычка
2.
this.val()
используется для ввода — измените наthis.text()
3. Для этого вам нужно взглянуть на свой код, у вас много ошибок типа
<th> id="totalofMargin"</th>
. И<th id="totalofExpense></th>
отсутствует"
4.
$(table).find('td').not(":first")
даст вам всеtd
s, кроме самого первого (т. е. вверху слева). Вы, наверное, хотите$(table).find('td').not(":first-child")
5. Почему вы даже пытаетесь прочитать эти данные из таблицы, чтобы подвести итог, почему вы не делаете это в том же месте, где вы уже просматриваете данные для создания таблицы?
Ответ №1:
Просто суммируйте свои столбцы по мере прохождения, а затем установите text
соответствующую общую ячейку:
const result = {
Data: [{
Popname: "Row1",
Income: "1,00",
Expense: "2,00",
Profit: "3,00",
ProfitMargin: "4,00",
Time: "5,00"
},
{
Popname: "Row2",
Income: "6,00",
Expense: "7,00",
Profit: "8,00",
ProfitMargin: "9,00",
Time: "10,00"
},
]
}
let data = "";
let tIncome = 0;
let tExpense = 0;
let tProfit = 0;
let tProfitMargin = 0;
let tTime = 0;
for (var i = 0; i < result.Data.length; i ) {
const income = parseFloat(result.Data[i].Income.replace(",", "."));
const expense = parseFloat(result.Data[i].Expense.replace(",", "."));
const profit = parseFloat(result.Data[i].Profit.replace(",", "."));
const profitMargin = parseFloat(result.Data[i].ProfitMargin.replace(",", "."));
const time = parseFloat(result.Data[i].Time.replace(",", "."));
data = '<tr>'
'<td> ' result.Data[i].Popname '</td>'
'<td> ' income '</td>'
'<td>' expense '</td>'
'<td>' profit '</td>'
'<td>' profitMargin '</td>'
'<td>' time '</td>'
'</tr>';
tIncome =income;
tExpense = expense;
tProfit = profit
tProfitMargin = profitMargin
tTime = time;
}
$("#details").empty().append(data);
$("#totalofIncome").text(tIncome);
$("#totalofExpense").text(tExpense);
$("#totalofMargin").text(tProfit);
$("#totalofMarginProfit").text(tProfitMargin);
$("#totalofTime").text(tTime);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="TableDetails">
<table id="detailTable" style="width:100%">
<thead>
<tr>
<th>Popname</th>
<th>Expense</th>
<th>Income</th>
<th>Margin</th>
<th>Margin Profit</th>
<th>Time</th>
</tr>
</thead>
<tbody id="details">
</tbody>
<tfoot id="totalValues">
<tr>
<th>Total: </th>
<th id="totalofIncome"></th>
<th id="totalofExpense"></th>
<th id="totalofMargin"></th>
<th id="totalofMarginProfit"></th>
<th id="totalofTime"></th>
</tr>
</tfoot>
</table>
</div>