2017-02-11 10 views
0

Я пытаюсь реализовать footerCallback в DataTables, который вычисляет условную сумму каждого столбца на основе ячейки, которая находится в другом столбце в той же строке. Вот демо моей установки: https://jsfiddle.net/rantoun/552y9j90/13/DataTables footerCallback - условно для другой ячейки

HTML:

<table id="table1"> 
    <thead> 
    <tr> 
     <th>Fruit</th> 
     <th>sumCondition</th> 
     <th># Eaten</th> 
     <th># Remaining</th> 
    </tr> 
    </thead> 
    <tfoot> 
    <tr> 
     <th></th> 
     <th align="center">Count</th> 
     <th align="left"></th> 
     <th align="left"></th> 
    </tr> 
    </tfoot> 
    <tbody> 
    <tr> 
     <td>Apples</td> 
     <td>Use</td> 
     <td>3</td> 
     <td>8</td> 
    </tr> 
    <tr> 
     <td>Oranges</td> 
     <td>Use</td> 
     <td>6</td> 
     <td>5</td> 
    </tr> 
    <tr> 
     <td>Bananas</td> 
     <td>Ignore</td> 
     <td>2</td> 
     <td>9</td> 
    </tr> 
    </tbody> 
</table> 

JQuery:

$("#table1").DataTable({ 
    "paging": false, 
    "searching": false, 
    "info": false,  
    "footerCallback": function (row, data, start, end, display) { 

     var columns = [2, 3]; 
     var api = this.api(); 

     _.each(columns, function(idx) { 

      var total = api 
       .column(idx) 
       .data() 
       .reduce(function (a, b) { 
        return parseInt(a) + parseInt(b); 
       }, 0)   

       $('tr:eq(0) th:eq('+idx+')', api.table().footer()).html(total); 
     }) 

    } 
}); 

В частности, моя цель состоит в footerCallback только просуммировать строки, в которых "игнор" НЕ в столбец Условие. Надеюсь, это понятно, и любая помощь приветствуется.

ответ

0

Я решил это, получив текущий индекс суммирующего значения в функции уменьшения, а затем использовал индекс для доступа к соответствующему значению в ячейке условия. Ниже приведен новый JQuery код:

$("#table1").DataTable({ 
    "paging": false, 
    "searching": false, 
    "info": false,  
    "footerCallback": function (row, data, start, end, display) { 


    var columns = [2, 3]; 
    //console.log(data); 
    var api = this.api(); 

    // Get sumCondition and put in array  

    _.each(columns, function(idx) { 

     var total = api 
      .column(idx) 
      .data() 
      .reduce(function (a, b) { 
       // Find index of current value for accessing sumCondition value in same row 
       var cur_index = api.column(idx).data().indexOf(b); 
       if (api.column(1).data()[cur_index] != "Ignore") { 
       return parseInt(a) + parseInt(b); 
       } 
       else { return parseInt(a); } 
      }, 0)   

      $('tr:eq(0) th:eq('+idx+')', api.table().footer()).html(total); 
    }) 

} });

Рабочая Fiddle:https://jsfiddle.net/rantoun/552y9j90/14/

 Смежные вопросы

  • Нет связанных вопросов^_^