2016-07-06 3 views
3

У меня есть dataTable, который заполнен элементами, которые либо находятся в черновом, ожидающем утверждения, одобренного, либо отрицаемого. Статусы элементов находятся в одном столбце.Искать несколько значений в одном столбце dataTable (возможно, использовать массив?)

Я хотел бы найти этот столбец для нескольких типов статусов.

Например, я хотел бы найти ожидающие и одобренные элементы, а затем перерисовать таблицу, чтобы отображать только те элементы, которые либо ожидали, либо были одобрены.

Кикер - это то, что я хочу, чтобы эта строка поиска изменялась динамически с помощью флажка.

поиска работает с жесткими кодированными значениями:

$('#theTable').DataTable().search('Pending').draw(); 

и даже

$('#theTable').DataTable().search('Pending'|'Approved').draw(); 

Но я хотел бы изменить строку поиска («В ожидании» | «Одобрено» часть) динамически, на основе флажков.

Итак ...

if($("#Pending").is(":checked")) { 
    searchString += 'Pending'; 
    $('#theTable').DataTable().search(searchString).draw(); 
} 

if($("#Approved").is(":checked")) { 
    searchString += 'Approved'; 
    $('#theTable').DataTable().search(searchString).draw(); 
} 

Но это не работает. Я попытался конкатенировать, используя массив, используя fnFilter, а не поиск, но ничего не работает.

Любые идеи?

ответ

2

Это было решено с помощью массива, который добавляет элементы поиска, а затем проходит через массив и соединяет их с каналом.

Ниже, что было использовано:

var whatsSelected = []; 
$.each($('.statusChk'), function() { 
    if ($(this).is(":checked")) { 
     whatsSelected.push('(?=.*' + $(this).val() + ')'); 
    } 
}); 

$('#theTable').DataTable().search(whatsSelected.join('|'), true, false, true).draw(); 

Добавленная строка (?=.*, то выключая регулярное выражение (? Я думаю, что это то, что ложь делает) была необходима, чтобы сделать эту работу.

0

Похоже, он кэширует параметры поиска до тех пор, пока вы не выполните цепочку draw(). Затем он отправит вызов в конечную точку с параметрами в столбцах [n] [данные]: заполняется, чтобы вы могли обрабатывать их в сценарии на стороне сервера.

я сделал что-то вроде этого:

$("#ddlTeam").change(function() { 
        var val= this.value; 
        if(val>0){ 
         $('#example').DataTable().columns(9).search($("#ddlDomObject").val()); 
         $('#example').DataTable().columns(5).search(val).draw(); 
        }else{ 
         $('#example').DataTable().columns(5).search('').draw(); 
        } 

       });