2011-05-13 10 views

Odpowiedz

161

Możesz użyć interfejsu API DataTables do filtrowania tabeli. Więc wszystko, czego potrzebujesz, to własne pole wejściowe ze zdarzeniem keyup, które uruchamia funkcję filtrowania w DataTables. Za pomocą css lub jquery możesz ukryć/usunąć istniejące pole wyszukiwania. A może DataTables ma ustawienie do usunięcia/nie-uwzględnienia go.

Sprawdź dokumentację interfejsu API Datatables na ten temat.

Przykład:

HTML

<input type="text" id="myInputTextField"> 

JS

oTable = $('#myTable').DataTable(); //pay attention to capital D, which is mandatory to retrieve "api" datatables' object, as @Lionel said 
$('#myInputTextField').keyup(function(){ 
     oTable.search($(this).val()).draw() ; 
}) 
+0

Dzięki za rozwiązanie! –

+7

Powinieneś zdecydowanie użyć .keyup zamiast .keypress, w przeciwnym razie możesz doświadczyć opóźnienia w wynikach. –

+1

Pomyślałem o wstawieniu '$ (" dataTables_filter: input "). Focus(). Val (wartość) .keypress(); 'w' keyup' na moim wejściu przez około godzinę, zanim to znajdę. Nigdy jednak, aby korzystać z API .. Eleganckie rozwiązanie! – MattSizzle

14

Można użyć opcji sDom do tego.

Domyślnie z wejściem wyszukiwania we własnej div:

sDom: '<"search-box"r>lftip' 

Jeśli używasz jQuery UI (bjQueryUI zestaw do true):

sDom: '<"search-box"r><"H"lf>t<"F"ip>' 

Powyższy położy wyszukiwanie/filtrowanie elementu input do własnego div z klasą o nazwie search-box, która znajduje się poza rzeczywistą tabelą .

Mimo że używa swojej specjalnej skróconej składni, może w rzeczywistości wziąć dowolny HTML, który na nią rzucisz.

+0

@Marcus: faktycznie uważam, że sDom nie jest zbyt elegancki w użyciu, odłożyć na bok fakt, że nie możemy w pełni dostosować pola wyszukiwania (w tym polu znajduje się tekst "Szukaj" w postaci kodu). –

+0

Jeśli zdecydujesz się głosować, podaj swój powód. – mekwall

+0

ale nadal jest wewnątrz div.datatables_Wrapper, jakikolwiek sposób, aby przenieść go poza nim, jak również? – Artur79

1

Można przesunąć element div, gdy tabela zostanie narysowana za pomocą funkcji fnDrawCallback.

$("#myTable").dataTable({ 
    "fnDrawCallback": function (oSettings) { 
     $(".dataTables_filter").each(function() { 
      $(this).appendTo($(this).parent().siblings(".panel-body")); 
     }); 
    } 
}); 
+0

Lub jeśli używasz nowszej wersji datatable będziesz miał:' "drawCallback": function (settings) { $ (". dataTables_filter"). each (function() { $ (this) .appendTo ($ (this) .parent() .siblings (". panel-body")); }); }, ' –

8

Ten pomógł mi na DataTables wersji 1.10.4, ponieważ jego nowy API

var oTable = $('#myTable').DataTable();  
$('#myInputTextField').keyup(function(){ 
    oTable.search($(this).val()).draw(); 
}) 
+0

Zwróć uwagę na kapitał" D "z" var oTable = $ ("# myTable"). DataTable(); " (https://www.datatables.net/faqs/#api) – Lionel

28

Zgodnie komentarzu @lvkz:

jeśli używasz DataTable z wielką d .DataTable() (ta zwróci obiekt Datatable API) użyj tego:

oTable.search($(this).val()).draw() ; 

który jest @n odpowiedź etbrain.

jeśli używasz DataTable z małymi d .dataTable() (będzie to zwraca obiekt jquery) użyj:

oTable.fnFilter($(this).val()); 
+4

'oTable.fnFilter ($ (this) .val());' Dla mnie też działało, – shabeer90

+10

Obydwie metody są poprawne, w zależności od tego, jak dzwonisz datatable: 'oTable.search ($ (this) .val()). draw();' ty używasz, gdy go nazywasz: '.DataTable()' i ten: 'oTable.fnFilter ($ (this) .val()); 'gdy używasz' .dataTable() ' Różnica polega na kapitale D. Mam nadzieję, że to pomoże! – Lvkz

+0

Daje błąd "oTable.fnFilter is a function" dla wersji danych 1.10.5 –

1
$('#example').DataTable({ 
    "bProcessing": true, 
    "bServerSide": true, 
    "sAjaxSource": "../admin/ajax/loadtransajax.php", 
    "fnServerParams": function (aoData) { 
     // Initialize your variables here 
     // I have assign the textbox value for "text_min_val" 
     var min_val = $("#min").val(); //push to the aoData 
     aoData.push({name: "text_min_val", value:min_val}); 
    }, 
    "fnCreatedRow": function (nRow, aData, iDataIndex) { 
     $(nRow).attr('id', 'tr_' + aData[0]); 
     $(nRow).attr('name', 'tr_' + aData[0]); 
     $(nRow).attr('min', 'tr_' + aData[0]); 
     $(nRow).attr('max', 'tr_' + aData[0]); 
    } 
}); 

W loadtransajax.php może pojawić się wartość otrzymujemy:

if ($_GET['text_min_val']){ 
    $sWhere = "WHERE ("; 
    $sWhere .= " t_group_no LIKE '%" . mysql_real_escape_string($_GET['text_min_val']) . "%' "; 
    $sWhere .= ')'; 
} 
0

Jeśli używasz JQuery dataTable, musisz tylko dodać "bFilter":true. Spowoduje to wyświetlenie domyślnego pola wyszukiwania poza stół i jego dzieła dynamically..as za spodziewane

$("#archivedAssignments").dataTable({ 
       "sPaginationType": "full_numbers", 
       "bFilter":true, 
       "sPageFirst": false, 
       "sPageLast": false, 
       "oLanguage": { 
       "oPaginate": { 
        "sPrevious": "<< previous", 
        "sNext" : "Next >>", 
        "sFirst": "<<", 
        "sLast": ">>" 
        } 
       }, 
      "bJQueryUI": false, 
      "bLengthChange": false, 
      "bInfo":false, 
      "bSortable":true 
     });  
+0

Pytanie dotyczyło zmiany pozycji dynamicznie tworzonych. Umieszczenie go na zewnątrz stołu –

3

ta powinna być praca dla Ciebie: (DataTables 1.10.7)

oTable = $('#myTable').dataTable(); 

$('#myInputTextField').on('keyup change', function(){ 
    oTable.api().search($(this).val()).draw(); 
}) 

lub

oTable = $('#myTable').DataTable(); 

$('#myInputTextField').on('keyup change', function(){ 
    oTable.search($(this).val()).draw(); 
}) 
5

Nowsze wersje mają inną składnię:

var table = $('#example').DataTable(); 

// #myInput is a <input type="text"> element 
$('#myInput').on('keyup change', function() { 
    table.search(this.value).draw(); 
}); 

Należy zauważyć, że w tym przykładzie użyto zmiennej table przypisanej podczas inicjowania datatables. Jeśli nie masz zmienna ta dostępna, wystarczy użyć:

var table = $('#example').dataTable().api(); 

// #myInput is a <input type="text"> element 
$('#myInput').on('keyup change', function() { 
    table.search(this.value).draw(); 
}); 

od: DataTables 1.10

- Źródło: https://datatables.net/reference/api/search()

1

miałem ten sam problem.

Próbowałem wszystkich opublikowanych alternatyw, ale bez pracy, użyłem sposobu, który nie jest właściwy, ale działał idealnie.

Przykład wyszukiwania kod wejściowy

<input id="serachInput" type="text"> 

jQuery

$('#listingData').dataTable({ 
    responsive: true, 
    "bFilter": true // show search input 
}); 
$("#listingData_filter").addClass("hidden"); // hidden search input 

$("#serachInput").on("input", function (e) { 
    e.preventDefault(); 
    $('#listingData').DataTable().search($(this).val()).draw(); 
}); 
2

chcę dodać jeszcze jedną rzecz do @netbrain's answer właściwego w przypadku używanej przetwarzanie po stronie serwera (patrz serverSide opcję).

Przepustowość kwerendy przeprowadzona domyślnie przez datatables (zobacz opcję searchDelay) nie ma zastosowania do wywołania API .search(). Możesz go odzyskać, używając $.fn.dataTable.util.throttle() w następujący sposób:

var table = $('#myTable').DataTable(); 
var search = $.fn.dataTable.util.throttle(
    function(val) { 
     table.search(val).draw(); 
    }, 
    400 // Search delay in ms 
); 

$('#mySearchBox').keyup(function() { 
    search(this.value); 
}); 
Powiązane problemy