Javascript 使用jquery选择器计算html表中的列和行总和
我试图计算html表中的行和列总数。但是,我试图计算到倒数第二列的行总数。我可以做到最后一列,但不能做到倒数第二。我还想从第一列中删除总计:0。你能帮我一下吗,下面是我的代码:Javascript 使用jquery选择器计算html表中的列和行总和,javascript,jquery,html,Javascript,Jquery,Html,我试图计算html表中的行和列总数。但是,我试图计算到倒数第二列的行总数。我可以做到最后一列,但不能做到倒数第二。我还想从第一列中删除总计:0。你能帮我一下吗,下面是我的代码: <table id="sum_table" width="300" border="1"> <tr class="titlerow"> <td></td> <td>Apple</td>
<table id="sum_table" width="300" border="1">
<tr class="titlerow">
<td></td>
<td>Apple</td>
<td>Orange</td>
<td>Watermelon</td>
<td>Total By Row</td>
<td>Strawberry</td>
</tr>
<tr>
<td> Row1</td>
<td class="rowAA">1</td>
<td class="rowAA">2</td>
<td class="rowBB">3</td>
<td class="totalRow"></td>
<td class="rowBB">4</td>
</tr>
<tr>
<td> Row2</td>
<td class="rowAA">1</td>
<td class="rowAA">2</td>
<td class="rowBB">3</td>
<td class="totalRow"></td>
<td class="rowBB">4</td>
</tr>
<tr>
<td>Row3</td>
<td class="rowAA">1</td>
<td class="rowAA">5</td>
<td class="rowBB">3</td>
<td class="totalRow"></td>
<td class="rowBB">4</td>
</tr>
<tr class="totalColumn">
<td class="totalCol"></td>
<td class="totalCol"></td>
<td class="totalCol"></td>
<td class="totalCol"></td>
<td class="totalCol"></td>
<td class="totalCol"></td>
</tr>
</table>
我希望表格的格式如下所示:
|Apples|Oranges|Watermelon|TotalRow|Strawberry|
Row1 |
Row2 |
Row3 |
Total|
这就是你要找的吗? 我改变了这个
$("#sum_table tr:last")
到
及
到
这就是你要找的吗? 我改变了这个
$("#sum_table tr:last")
到
及
到
如果您想阻止表格中左下和右下的单元格显示总计(至少我是这样理解您的问题的),您必须将选择器从
#sum_table tr:last td
更改为#sum_table tr:last td:not(:first,:last)
。然后,为了说明指数的变化(因为第1列中的td
元素已被排除),您必须将++i
更改为i+2
。下面是JS代码()第二部分的更新版本:
编辑:根据您所做的更新,是否更符合您的要求?此解决方案基本上通过切换每个tr
(即每行)中的第二个last和最后一个td
,修改HTML代码,JS代码中的第一个CSS选择器被修改为#sum_table tr:not(:first,:last)td:nth child(5)
,以便在最后第二列中显示“Total”(即,每个适用行的第五个td
)
如果出于任何原因,您希望HTML代码保持原样,并且希望实现一个纯JS解决方案,而不需要手动修改HTML代码,那么您可以执行以下操作():
这与本次编辑中上面介绍的第一个解决方案基本相同,不同之处在于使用jQuery以编程方式交换第二列和最后一列(而不是手动交换)。如果要防止表中的左下和右下单元格显示总计(至少我是这样理解您的问题的),您必须将选择器从
#sum#table tr:last td
更改为#sum#table tr:last td:not(:first,:last)
。然后,考虑索引的变化(因为第1列中的td
元素已被排除),您必须将++i
更改为i+2
编辑:根据您所做的更新,可能更符合您的要求?此解决方案基本上通过切换每个tr
(即每行)中的倒数第二个和倒数第二个td
,修改HTML代码,JS代码中的第一个CSS选择器被修改为#sum_table tr:not(:first,:last)td:n第n个子项(5)
,以便“总计”显示在最后第二列中(即,每个适用行的第五个td
)
如果出于任何原因,您希望HTML代码保持原样,并且希望实现一个纯JS解决方案,而不需要手动修改HTML代码,那么您可以执行以下操作():
这与本次编辑中上面介绍的第一个解决方案基本相同,只是第二个最后一列和最后一列使用jQuery以编程方式交换(而不是手动交换).有人吗?我正在通宵工作,这是为了一个我今天要展示的项目。我看到了这个项目的可能副本,但情况不同。如果我理解正确,您想去掉右下角单元格中的“总计:33”和“总计:0”在左下角的单元格中?我想去掉总计:0,但我需要将总计行向左移动1,并将strawbery列作为最后一列。我不希望stawbery列成为总计行的一部分。strawbery列应该只有列TotalAnywhere?我正在开一个通宵会议,这是为了一个我今天必须演示的项目重复的我已经看到了这一点,尽管它是一个不同的情况,所以如果我理解正确,你想摆脱右下角单元格中的“总计:33”和“总计:0”在左下角的单元格中?我想去掉总计:0,但我需要将总计行向左移动1,并将strawbery列作为最后一列。我不希望stawbery列成为总计行的一部分。strawbery列应仅具有列totalno id希望第4列中的总计行和第5列中的总计行都是草莓。我需要输入结果将第4列之前的行添加到一起。只应添加第5列vertically@ivan检查我刚才所做的编辑,看看它是否更符合您要做的。我不想让第4列和第5列中的总行为草莓色。我需要将第4列之前的行中的结果添加到一起。只应添加第5列 vertically@ivan检查我刚才所做的编辑,看看它是否更符合您想要做的。我不想让第4列和第5列中的总行为草莓色。我需要将第4列之前的行中的结果添加到一起。第5列应仅垂直添加。我不想让第4列和第5列中的总行为草莓色草莓。我需要将第4列之前的行中的结果添加到一起。第5列只能垂直添加
$("#sum_table tr:last td:not(:first,:last)")
$(this).parent().prevAll().find("td:nth-child("+(++i)+")").each(function(){
$(this).parent().prevAll().find("td:nth-child("+(i + 2)+")").each(function(){
$("#sum_table tr:last td:not(:first,:last)").text(function(i){
var t = 0;
$(this).parent().prevAll().find("td:nth-child("+(i+2)+")").each(function(){
t += parseInt( $(this).text(), 10 ) || 0;
});
return "Total: " + t;
});
//Swap the second-last and last columns
$("#sum_table tr td:last-child").each(function(){
var lastRowContent = $(this)[0].innerHTML;
var secondLastRowContent = $(this).parent().find("td:nth-child(5)")[0].innerHTML;
$(this).parent().find("td:nth-child(5)")[0].innerHTML = lastRowContent;
$(this)[0].innerHTML = secondLastRowContent;
});
$("#sum_table tr:not(:first,:last) td:nth-child(5)").text(function(){
var t = 0;
$(this).prevAll().each(function(){
t += parseInt( $(this).text(), 10 ) || 0;
});
return t;
});
$("#sum_table tr:last td:not(:first)").text(function(i){
var t = 0;
$(this).parent().prevAll().find("td:nth-child("+(i+2)+")").each(function(){
t += parseInt( $(this).text(), 10 ) || 0;
});
return "Total: " + t;
});