Javascript JQuery-表计算

Javascript JQuery-表计算,javascript,jquery,Javascript,Jquery,我有一个从数据库生成的表。并隐藏每个字段,直到从“选择”下拉列表中选择为止。还需要计算可见行。我有这个代码,但它计算所有行,甚至是可见的。你能告诉我如何修改代码,只计算可见的行吗 表: <table width="100%" border="0" id="sum_table"> <tr style="color:white;background:gray;"> <td>Name</td> <td>

我有一个从数据库生成的表。并隐藏每个字段,直到从“选择”下拉列表中选择为止。还需要计算可见行。我有这个代码,但它计算所有行,甚至是可见的。你能告诉我如何修改代码,只计算可见的行吗

表:

<table width="100%" border="0" id="sum_table">
    <tr style="color:white;background:gray;">
        <td>Name</td>
        <td>Column 1</td>
        <td>Column 2</td>
        <td>Column 3</td>
        <td>Column 4</td>
    </tr>
    <tr id="one">
        <td>Service 1</td>
        <td>12</td>
        <td>45</td>
        <td>45</td>
        <td>54</td>
    </tr>
    <tr id="two">
        <td>Service 2</td>
        <td>8</td>
        <td>42</td>
        <td>35</td>
        <td>23</td>
    </tr>
    <tr id="three">
        <td>Service 3</td>
        <td>6</td>
        <td>65</td>
        <td>16</td>
        <td>26</td>
    </tr>
    <tr id="result" style="background:silver;">
        <td>TOTAL:</td>
        <td id="total1">0</td>
        <td>0</td>
        <td></td>
        <td></td>
    </tr>
</table>
<br>ADD LINE:
<select id="select_stud">
    <option>-- Select --</option>
    <option>one</option>
    <option>two</option>
    <option>three</option>
</select>
另外,我只需要计算2列

以下是完整代码:


谢谢。

以下是一个您正在尝试的示例:

要在计算总和时仅查看可见行,可以添加如下条件:

if ( $(this).parent().css('display') != 'none' )
您还需要在每次添加新列时更新总和。您可以通过将求和计算包装到函数中来实现这一点。在本例中,更新sums并在select元素的change函数中调用它:

$('#select_stud').change(function () {
    $('#'+$(this).val()).show();
    updateSums();
})
也就是说,您的方法可能不是处理此问题的最佳方法。通常,您希望视图是从数据派生的,而不是从数据派生的

编辑:如注释中所指出的,如果您希望计算最后一列,则需要将$sum_table tr:last td:not:first,:last更改为$sum_table tr:last td:not:first


我不清楚这是否是你的意图。

干得好!另外,别忘了将选择器从:$sum_table tr:last td:not:first,:last修改为$sum_table tr:last td:not:first以包括最后一列:我只需要计算两列,第1列和第2列,不包括任何其他列。
$("#sum_table tr:last td:not(:first,:last)").text(function(i){
    var t = 0;
    $(this).parent().prevAll().find("td:nth-child("+(i+2)+")").filter(":visible").each(function(){
        t += parseInt( $(this).text(), 10 ) || 0;
    });
    return "= " + t;
});
$("#sum_table tr:last td:not(:first,:last)").text(function(i){
    var t = 0;
    $(this).parent().prevAll().find("td:nth-child("+(i+2)+")").filter(":visible").each(function(){
        t += parseInt( $(this).text(), 10 ) || 0;
    });
    return "= " + t;
});