2016-02-07 1 views
2

Я пытаюсь найти строку в своей таблице и добавить класс к этой строке. Но этот код не работает. Просто ничего не происходит. Вот мой код, последний я называю myTable() функция:Datatables find string и add class

function myTable() { 
    var selectDateVar = $('#selectDate').val(); 

     var table = $('#example').DataTable({ // Таблица 
      "processing": true, 
      "serverSide": true, 
      "deferRender": true, 
      "bDestroy": true, 

      "sAjaxSource": "server_processing.php?data=30/09/2015", 
      "order": [[ 2, "desc" ]], 
      initComplete: function(){ 
       var api = this.api(); 

       new $.fn.dataTable.Buttons(api, { 
        buttons: [ 
         { 
         extend: 'print', 
         text: 'Принтиране', 
         'className': 'btn-lg btn btn-warning printBTN', 
         }, 
        ] 
       }); 

       api.buttons().container().appendTo('.printButton'); 
      } 

     }); 

     var indexes = table.rows().eq(0).filter(function (rowIdx) { 
      return table.cell(rowIdx, 3).data() === '180' ? true : false; 
     }); 
     table.rows(indexes).nodes().to$().addClass('highlight'); 
    } 

Мой стол:

enter image description here

Я использую этот пример https://datatables.net/reference/type/row-selector

+0

@Spirit да, я уверен. – diank

ответ

2
function myTable() { 
    var selectDateVar = $('#selectDate').val(); 

    var table = $('#example').DataTable({ // Таблица 
     "processing": true, 
     "serverSide": true, 
     "deferRender": true, 
     "bDestroy": true, 

     "sAjaxSource": "server_processing.php?data=30/09/2015", 
     "order": [[ 2, "desc" ]], 
     initComplete: function(){ 
      var api = this.api(); 
      new $.fn.dataTable.Buttons(api, { 
       buttons: [ 
        { 
        extend: 'print', 
        text: 'Принтиране', 
        'className': 'btn-lg btn btn-warning printBTN', 
        }, 
       ] 
      }); 

      api.buttons().container().appendTo('.printButton'); 

      //filtering code should be inside of initComplete function 
      //but in your case an empty table is filtered 
      var indexes = table.rows().eq(0).filter(function (rowIdx) { 
       return table.cell(rowIdx, 3).data() === '180' ? true : false; 
      }); 

      table.rows(indexes).nodes().to$().addClass('highlight'); 
     } 

    }); 
} 

вам нужно вызвать код на данных нагрузки. В настоящее время вы вызываете его, прежде чем таблица будет заполнена данными сервера. Просто добавьте образец кода в функцию initComplete. initComplete будет вызываться после момента загрузки данных Ajax.

Ответ на второй вопрос:, если вам нужно выполнить поиск по нескольким столбцам просто добавьте следующий код:

var indexes = table.rows().eq(0).filter(function (rowIdx) { 
    return table.cell(rowIdx, 3).data() === '180' && 
      table.cell(rowIdx, 0).data() === '521' ? true : false; 
}); 
+0

см. Мой комментарий, это мой код. – diank

+0

да работа как шарм, но если я использую поиск, разбивку на страницы, сортировку, обновленную таблицу, класс просто исчез. Есть ли какое-то исправление для этого? – diank

+2

@diank - вы можете выполнить код в [** drawCallback **] (https://datatables.net/reference/option/drawCallback), поэтому класс добавляется каждый раз, когда таблица перерисовывается. – davidkonrad