【问题标题】:sum column value using datatable使用数据表对列值求和
【发布时间】:2014-02-21 16:46:40
【问题描述】:

我想在代码末尾将 earning 列的值与总数相加。我正在使用Jquery datatable 通过此代码过滤记录,但无法为总数编写代码。我也使用tried footer callback of datatable,但没有得到想要的结果。

        <script src="media/js/jquery-1.4.4.min.js" type="text/javascript"></script>
        <script src="media/js/jquery.dataTables.min.js" type="text/javascript"></script>
        <script type="text/javascript" language="javascript" src="media/js/jquery.dataTables.js"></script>
        <script src="media/js/jquery-ui.js" type="text/javascript"></script>
        <script src="media/js/jquery.dataTables.columnFilter.js" type="text/javascript"></script>
        <script type="text/javascript">
$(document).ready(function(){
                $.datepicker.regional[""].dateFormat = 'dd/mm/yy';
                $.datepicker.setDefaults($.datepicker.regional['']);
     $('#example').dataTable({
"aoColumns": [{},
                ]
                } )
            .columnFilter({ sPlaceHolder: "head:before",
            aoColumns: [ { type: "hidden" },
                        { type: "hidden" },
                        { type: "hidden" },
                        { type: "hidden" },
                        { type: "hidden" },
                        { type: "hidden" },
                        { type: "hidden" },
                        { type: "hidden" },
                        { type: "hidden" },
                        { type: "date-range", sRangeFormat: "From Date{from} To Date {to}" },
                        { type: "hidden" },
                        { type: "hidden" },
                        { type: "hidden" }
                ],
"fnFooterCallback": function ( nRow, aaData, iStart, iEnd, aiDisplay ) {
                        /*
                         * Calculate the total market share for all browsers in this table (ie inc. outside
                         * the pagination)
                         */
                        var iTotalMarket = 0;
                        for ( var i=0 ; i<aaData.length ; i++ )
                        {
                            iTotalMarket += aaData[i][11]*1;
                        }

                        /* Calculate the market share for browsers on this page */
                        var iPageMarket = 0;
                        for ( var i=iStart ; i<iEnd ; i++ )
                        {
                            iPageMarket += aaData[ aiDisplay[i] ][11]*1;
                        }

                        /* Modify the footer row to match what we want */
                        var nCells = nRow.getElementsByTagName('th');
                        nCells[1].innerHTML = parseInt(iPageMarket * 100)/100 +
                            '% ('+ parseInt(iTotalMarket * 100)/100 +'% total)';
                    }

        });
});

        </script>
    </head>




<body id="dt_example">

<div id="demo">
 <table id="example" class="display">
                    <thead>
                        <tr>
                          <th>Agent Code</th>
                            <th>Agent Name</th>
                            <th>Designation</th>
                            <th>Account No.</th>
                            <th>Customer Name</th>
                            <th>Plan No.</th>
                            <th>Invoice</th>
                            <th>Bill Amt.</th>
                            <th>Bill Date</th>
                            <th>Pay Date</th>
                            <th>Insta. No.</th>
                            <th>Earning</th>
                            <th>Remark</th>                          </tr>                        
<tr>
                            <th>&nbsp;</th>
                            <th>&nbsp;</th>
                            <th>&nbsp;</th>
                            <th>&nbsp;</th>
                            <th>&nbsp;</th>
                            <th>&nbsp;</th>
                            <th>&nbsp;</th>
                            <th>&nbsp;</th>
                            <th>&nbsp;</th>
                            <th>&nbsp;</th>
                            <th>&nbsp;</th>
                            <th>&nbsp;</th>
                            <th>&nbsp;</th>
</tr>
                    </thead>

                    <tbody> 
                        <tr>
        <td></td>
  <td></td>
  <td></td>
  <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>


    <td></td>
  </tr>
                    </tbody>
                        <tfoot>
        <tr>
            <th style="text-align:right" colspan="11">Total:</th>
            <th></th>
        </tr>
    </tfoot>
  </table>
        </div>
</body>
</html>

【问题讨论】:

  • 显示你试过的代码
  • "fnFooterCallback": 函数 (nRow, aaData, iStart, iEnd, aiDisplay) { var total = 0; for ( var i=0 ; i

标签: jquery jquery-plugins datatables


【解决方案1】:

这里是解决方案:- 使用页脚回调函数来做到这一点。 此回调在每次绘制时运行。因此,每当更改表格内容时,此函数都会运行并更改页面上的总工资。

$(document).ready(function() {
  $('#example').dataTable({  
    "sPaginationType": "full_numbers",
    "footerCallback": function ( row, data, start, end, display ) {
      var api = this.api(), data;   
      // 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;
      };

      // total_salary over all pages
      total_salary = api.column( 1 ).data().reduce( function (a, b) {
        return intVal(a) + intVal(b);
      },0 );

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

      total_page_salary = parseFloat(total_page_salary);
      total_salary = parseFloat(total_salary);
      // Update footer
      $('#totalSalary').html(total_page_salary.toFixed(2)+"/"+total_salary.toFixed(2));        
    },    
  });
});
<link href="https://cdn.datatables.net/1.10.20/css/jquery.dataTables.min.css" rel="stylesheet"/>
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" rel="stylesheet"/>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdn.datatables.net/1.10.20/js/jquery.dataTables.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"></script>
         
<div class="container">
  <table cellpadding="0" cellspacing="0" border="0" class="dataTable" id="example">
  <thead>
    <tr>
      <th>Name</th>
      <th>Salary</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>abc</td>
      <td>100</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>100</td>
    </tr>
    <tr>
       <td>abc</td>
      <td>100</td>
    </tr>
    <tr>
       <td>abc</td>
      <td>100</td>
    </tr>
    <tr>
       <td>abc</td>
      <td>100</td>
    </tr>
    <tr>
       <td>abc</td>
      <td>100</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>500</td>
    </tr>
    <tr>
       <td>abc</td>
      <td>100</td>
    </tr>
    <tr>
       <td>abc</td>
      <td>200</td>
    </tr>
    <tr>
       <td>abc</td>
      <td>200</td>
    </tr>
    <tr>
       <td>abc</td>
      <td>200</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>100</td>
    </tr>
    <tr>
       <td>abc</td>
      <td>100</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>100</td>
    </tr>
    <tr>
       <td>abc</td>
      <td>100</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>100</td>
    </tr>
    <tr>
       <td>abc</td>
      <td>100</td>
    </tr>
    <tr>
       <td>abc</td>
      <td>100</td>
    </tr>
    <tr>
       <td>abc</td>
      <td>100</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>100</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>100</td>
    </tr>
    <tr>
       <td>abc</td>
      <td>100</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>100</td>
    </tr>
    <tr>
       <td>abc</td>
      <td>100</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>100</td>
    </tr>
    <tr>
       <td>abc</td>
      <td>100</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>100</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>100</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>100</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>100</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>100</td>
    </tr>
    <tr>
       <td>abc</td>
      <td>100</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>100</td>
    </tr>
    <tr>
       <td>abc</td>
      <td>100</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>100</td>
    </tr>
    <tr>
       <td>abc</td>
      <td>100</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>100</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>100</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>100</td>
    </tr>
    <tr>
       <td>lod</td>
      <td>100</td>
    </tr>
    <tr>
       <td>abc</td>
      <td>100</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>100</td>
    </tr>
    <tr>
      <td>aeda</td>
      <td>100</td>
    </tr>
    <tr>
       <td>xyz</td>
      <td>100</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>100</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>100</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>100</td>
    </tr>
    <tr>
      <td>xyz</td>
      <td>100</td>
    </tr>
    <tr>
      <td>xyz</td>
      <td>100</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>100</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>100</td>
    </tr>
    <tr>
       <td>abc</td>
      <td>100</td>
    </tr>
    <tr>
       <td>abc</td>
      <td>100</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>100</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>100</td>
    </tr>
    <tr>
       <td>abc</td>
      <td>100</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>100</td>
    </tr>
  </tbody>
  <tfoot>
    <tr>
      <td colspan='2'> <span style="float:right;"id ='totalSalary'>dsada </span> </td>
    </tr>
  </tfoot>
  </table>
</div>

【讨论】:

    【解决方案2】:

    看起来您在 columnFilter 初始化选项中定义了页脚回调,而不是在 dataTable 初始化选项中 - 我不希望它在那里工作。

    【讨论】:

      猜你喜欢
      • 2020-03-26
      • 2017-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-13
      • 1970-01-01
      • 1970-01-01
      • 2016-11-01
      相关资源
      最近更新 更多