我有这个代码
我希望在当前行的最后一列单元格中包含所有先前td单元格的总和。 *在页面加载上,如果可能的话,不使用类,表中的所有行。
例如
<tr>
<td>1</td>
<td>1</td>
<td>1</td>
<td>3</td> <!-- this is empty cell which will on page load filled with SUM value !-->
</tr>
我该怎么做?谢谢
答案 0 :(得分:1)
您需要获取所有td
的列表/数组,然后总计内容。即。
var tds = $('.htCore td');
var total = 0;
for(var i = 0; i < tds.length; i++){
total += parseInt(tds[i].html());
}
$('.htCore td:last-child').html(total);
这可以假设您的td中没有字符串/文字,如果您这样做,那么您需要:
var tds = $('.htCore td');
var total = 0;
var content = '';
for(var i = 0; i < tds.length; i++){
content = parseInt(tds[i].html();
if(!isNaN(content)){
total += content;
}
}
$('.htCore td:last-child').html(total);
答案 1 :(得分:1)
一般来说,这可能是一个坏主意。那些td
是显示文本的节点,将逻辑与表示分开是一个好主意。
话虽如此,你可以这样做:
var total = 0;
// Get an array of all the elements, and add their contents to total
$('td').map(function(_,v){total += +v.innerText;})
// Set the content of the last td to be total
$('td:last-child').text(total);
我们正在调用所有<td>
上的函数。此函数只是将<td>
的文本内容强制转换为数字,并将其添加到我们的total
变量中。
然后我们只将total
的值写入问题中指定的最后<td>
。
答案 2 :(得分:1)
你可以利用jquery .each()
的循环与一个类一起来确定应该放置总和的最后一个td(.sum
),如下所示
$(document).ready(function() {
$('table tr').each(function() {
var sum = 0;
$(this).find('td').each(function() {
if (!$(this).hasClass('sum')){
var num = parseInt($(this).text());
sum = sum + num;
}
});
$(this).find('.sum').text(sum);
});
});
td {
border: 1px solid black;
padding: 5px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
<td>6</td>
<td class="sum"></td>
</tr>
<tr>
<td>4</td>
<td>6</td>
<td>1</td>
<td>1</td>
<td>1</td>
<td>1</td>
<td class="sum"></td>
</tr>
</table>
此代码适用于表中的所有行(或者如果您希望它用于选择行,只需将类添加到您希望此求和应用于的行中)
答案 3 :(得分:1)
你可以这样做:
$('tr').find('td:last').text(function() {
return $(this).siblings().map(function() { return parseInt($(this).text(), 10); }).get().reduce(function(x, y) { return x + y });
});
查找每个td
中的最后一个tr
,然后通过获取每个兄弟text
的{{1}}来设置text
(使用td
),然后使用map
对结果数组求和。