Функция фильтрации диапазонов датированных данных конфликтует с фильтром окна поиска - PullRequest
0 голосов
/ 21 мая 2019

Я создал фильтр диапазона дат для моей таблицы данных, который работает как положено. Однако теперь окно поиска больше не работает, как раньше. Я предполагаю, что теперь он использует мою пользовательскую функцию, которая ограничена столбцом даты. Как я могу указать, что моя пользовательская функция поиска используется только при срабатывании события применения диапазона дат, иначе поведение по умолчанию сохраняется?

Вот код с рабочим фильтром диапазона дат на codepen.io https://codepen.io/bintux/pen/rgYeyp


$(function() {
 var table = $("#table_1").DataTable();

 // Date range vars
 minDateFilter = "";
 maxDateFilter = "";

 $("#daterange").daterangepicker();
 $("#daterange").on("apply.daterangepicker", function(ev, picker) {
  minDateFilter = Date.parse(picker.startDate.format("YYYY-MM-DD"));
  maxDateFilter = Date.parse(picker.endDate.format("YYYY-MM-DD"));
  table.draw();
 });

 $.fn.dataTable.ext.search.push(function(settings, data, dataIndex) {
  var date = Date.parse(data[1]); 

  if (
   (isNaN(minDateFilter) && isNaN(maxDateFilter)) ||
   (isNaN(minDateFilter) && date <= maxDateFilter) ||
   (minDateFilter <= date && isNaN(maxDateFilter)) ||
   (minDateFilter <= date && date <= maxDateFilter)
  ) {
   return true;
  }
  return false;
 });
});

<table id="table_1" >
 <thead>
  <tr>
   <th>Col1.</th>
   <th>Date</th>
  </tr>
 </thead>
 <tbody>
   <tr>
   <td>Set 1</td>
   <td data-order="1558358405">20 May 2019</td>
  </tr>
  <tr>
   <td>Set2</td>
   <td data-order="1558357779">20 May 2019</td>
  </tr>
....


Могу ли я передать аргументы в функцию draw (), когда срабатывает применение диапазона дат?

1 Ответ

0 голосов
/ 23 мая 2019

Благодаря Давидконрад ответ на аналогичный вопрос здесь , я смог решить его. Только что переместил функцию фильтра в функцию события применения диапазона дат.

 $("#daterange").on("apply.daterangepicker", function(ev, picker) {
  minDateFilter = Date.parse(picker.startDate);
  maxDateFilter = Date.parse(picker.endDate);

  $.fn.dataTable.ext.search.push(function(settings, data, dataIndex) {
  var date = Date.parse(data[1]);

  if (
   (isNaN(minDateFilter) && isNaN(maxDateFilter)) ||
   (isNaN(minDateFilter) && date <= maxDateFilter) ||
   (minDateFilter <= date && isNaN(maxDateFilter)) ||
   (minDateFilter <= date && date <= maxDateFilter)
  ) {
   return true;
  }
  return false;
 });
 table.draw();
}); 

Обновленный пример Codepen

...