Javascript 使用jquery选择器计算html表中的列和行总和

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>

我试图计算html表中的行和列总数。但是,我试图计算到倒数第二列的行总数。我可以做到最后一列,但不能做到倒数第二。我还想从第一列中删除总计:0。你能帮我一下吗,下面是我的代码:

<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;
});