如何为所选行的每列添加总和?

问题描述 投票:-3回答:1

我想制作一张桌子,以帮助我进行价格比较。解释:在我的表中我有:

  • 项目
  • 产品
  • 生产厂家
  • 标题
  • 数量
  • 单位购买价格(总和)
  • 总价买(总和)
  • 乘以(平均值)
  • 单位销售价格(总和)
  • 总销售价格(总和)
  • 利润(总和)

在我的情况下,理想的选择是选择我想要保留的行以查看我的选择的总价。所以我可以看到不同选择的成本。

有人会有想法或已经遇到过这个问题?

谢谢你的帮助:)

编辑每列的总和工作正常,但是当我选择它们时,我没有找到如何只为每列提供总和。抱歉,我对js感到不舒服: - /

// Remove the formatting to get integer data for summation
var intVal = function ( i ) {
    return typeof i === 'string' ?
    i.replace(/[\$,]/g, '')*1 :
    typeof i === 'number' ?
    i : 0;
};

$(document).ready(function() {
    var table = $('#example').DataTable( {
        columnDefs: [{
          targets: [4,5,6,8,9,10],
          render: $.fn.dataTable.render.number(',', '.', 2)
        }],
        responsive: true,
        paging:false,
        "footerCallback": function ( row, data, start, end, display ) {
            var api = this.api(), data;
            var sumColumns = [4,5,6,8,9,10];

            sumColumns.forEach(function(colIndex){
            // Total over all pages
                var total = api
                    .rows({ selected: true })
                    .column(colIndex)
                    .data()
                    .reduce( function (a, b) {
                        return intVal(a) + intVal(b);
                    }, 0 );

                // Total over this page
                var pageTotal = api
                    .column(colIndex, { page: 'current'} )
                    .data()
                    .reduce( function (a, b) {
                        return intVal(a) + intVal(b);
                    }, 0 );

                // Update footer
                $( api.columns(colIndex).footer() ).html(
                    total
                );
            }) 
        },
    });
}); 
<script src="https://cdn.datatables.net/1.10.19/js/jquery.dataTables.js"></script>
<link href="https://cdn.datatables.net/1.10.19/css/jquery.dataTables.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link href="https://use.fontawesome.com/releases/v5.1.0/css/all.css" rel="stylesheet"/>
<div id="page">
    <h1>Contacts</h1>
    <table id="example" class="display nowrap table1" cellspacing="0" width="100%">
        <thead>
        <tr>
            <th>projectid</th>
            <th>productid</th>
            <th>manufacturerid</th>
            <th>title</th>
            <th>quantity</th>
            <th>PAU a</th>
            <th>PAT a</th>
            <th>Coef a</th>
            <th>PVU a</th>
            <th>PVT a</th>
            <th>Profit a</th>
        </tr>
        </thead>
        <tbody>
        <tr>
            <td>1</td>
            <td>5</td>
            <td>5</td>
            <td>Title 1</td>
            <td>10</td>
            <td>130</td>
            <td>1300</td>
            <td>2</td>
            <td>260</td>
            <td>2600</td>
            <td>1300</td>
        </tr>
        <tr>
            <td>2</td>
            <td>3</td>
            <td>6</td>
            <td>Title 2</td>
            <td>10</td>
            <td>100</td>
            <td>1000</td>
            <td>2</td>
            <td>200</td>
            <td>2000</td>
            <td>1000</td>
        </tr>
        <tr>
            <td>3</td>
            <td>2</td>
            <td>5</td>
            <td>Title 3</td>
            <td>10</td>
            <td>50</td>
            <td>500</td>
            <td>2</td>
            <td>100</td>
            <td>1000</td>
            <td>500</td>
        </tr>
        </tbody>
        <tfoot>
        <tr>
            <th></th>
            <th></th>
            <th></th>
            <th></th>
            <th></th>
            <th>PAU a</th>
            <th>PAT a</th>
            <th></th>
            <th>PVU a</th>
            <th>PVT a</th>
            <th>Profit a</th>
        </tr>
        </tfoot>
    </table>
</div>
javascript php ajax
1个回答
0
投票

我写了一个函数来计算你的列和第7列的平均值,这与你的代码是分开的,你可以在任何你想要的地方使用它。

   jQuery(document).ready(function($) {

        var sumColumns = [4,5,6,8,9,10];
        $.each(sumColumns, function(index, val) {
            var total = 0;
         jQuery('tbody tr td:nth-child('+val+')').each(function(index, el) {
                total += parseInt($(this).html());
            });
            jQuery('tfoot tr th:nth-child('+val+')').each(function(index, el) {
                $(this).html(total);
            });
        });
        var total = 0;
        jQuery('tbody tr td:nth-child(7)').each(function(index, el) {
                total += parseInt($(this).html());
            });
            jQuery('tfoot tr th:nth-child(7)').each(function(index, el) {
                $(this).html(total/jQuery('tbody tr td:nth-child(7)').length);
            });
    });
© www.soinside.com 2019 - 2024. All rights reserved.