Datentabellen - Suchfeld außerhalb der Datentabelle


Antworten:


240

Sie können die DataTables-API verwenden, um die Tabelle zu filtern. Sie benötigen also nur ein eigenes Eingabefeld mit einem Keyup-Ereignis, das die Filterfunktion für DataTables auslöst. Mit CSS oder JQuery können Sie das vorhandene Sucheingabefeld ausblenden / entfernen. Oder DataTables hat eine Einstellung zum Entfernen / Nichteinschließen.

Überprüfen Sie hierzu die Dokumentation zur Datatables-API.

Beispiel:

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() ;
})

8
Sie sollten auf jeden Fall .keyup anstelle von .keypress verwenden, da sonst die Ergebnisse verzögert werden
Sævar

1
Ich verwirrte mit dem Setzen $(".dataTables_filter :input").focus().val(value).keypress();in denen keyupauf meinem Input für etwa eine Stunde, bevor diese zu finden. Niemals die API verwenden. Elegante Lösung!
MattSizzle

3
Das JS muss geändert werden, um .search ($ (this) .val ()) .draw () anstelle von fnFilter zu verwenden. Siehe: datatables.net/manual/api#Chaining Ich habe diese Antwort geändert, um sie zu beheben, aber es scheint, dass sie zuerst einer Peer-Review unterzogen werden muss.
Shane Grant

13
Anmerkung: Sie benötigen weiterhin die Option "search: true", und dann möchten Sie wahrscheinlich das Standardsuchfeld ausblenden. Setzen Sie also einfach die Option sDOM auf null.
Knall

8
Wenn Sie $ (). DataTable () mit einem kleinen "d" instanziieren, wird ein jQuery-Objekt anstelle einer DataTables-API-Instanz zurückgegeben. Letzteres kann durch Aufrufen von "oTable = $ ('# myTable'). DataTable ();" erreicht werden. mit einem Großbuchstaben "D". Dies ist erforderlich, um .search darauf aufrufen zu können (wenn andernfalls der Fehler "function undefined" ausgegeben wird). Siehe: datatables.net/faqs/#api
Lionel

34

Gemäß @ lvkz Kommentar:

Wenn Sie datatable mit Großbuchstaben d verwenden .DataTable()(dies gibt ein Datatable API-Objekt zurück), verwenden Sie Folgendes:

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

Das ist @netbrain Antwort.

Wenn Sie datatable mit Kleinbuchstaben d verwenden .dataTable()(dies gibt ein jquery-Objekt zurück), verwenden Sie Folgendes:

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

4
oTable.fnFilter($(this).val());Arbeitete auch für mich,
shabeer90

10
Beide Methoden sind gültig, je nachdem, wie Sie die Datentabelle aufrufen: `oTable.search ($ (this) .val ()). Draw ();` Sie verwenden, wenn Sie sie aufrufen: .DataTable()und diese: oTable.fnFilter($(this).val());wenn Sie .dataTable() den Unterschied verwenden ist in der Hauptstadt D. Hoffe es hilft!
Lvkz

Gibt einen Fehler "oTable.fnFilter ist keine Funktion" für Datentabellen Version 1.10.5
Ege Bayrak

Ich habe gerade herausgefunden, dass Sie mit jQuery auch wie folgt auf die Datenbank-API zugreifen können: Dies oTable.api().search($(this).val()).draw();kann nützlich sein, insbesondere wenn Sie auch die Paginierung manuell steuern möchten length:oTable.api().page.len($(this).val()).draw();
Ghis

15

Sie können die sDomOption hierfür verwenden.

Standard mit Sucheingabe in einem eigenen div:

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

Wenn Sie die jQuery-Benutzeroberfläche verwenden (auf bjQueryUIeingestellt true):

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

Mit dem obigen Befehl wird das Such- / Filterelement mit einer Klasse namens außerhalb der eigentlichen Tabelle inputin ein eigenes Element eingefügt.divsearch-box

Obwohl es seine spezielle Kurzschrift-Syntax verwendet, kann es tatsächlich jeden HTML-Code verwenden, den Sie darauf werfen.


@Marcus: Eigentlich finde ich, dass sDom nicht ganz elegant zu bedienen ist, abgesehen von der Tatsache, dass wir das Suchfeld nicht vollständig anpassen können (in diesem Feld befindet sich ein Hardcode-Text "Suchen").
Hoàng Long

aber es ist immer noch in div.datatables_Wrapper, wie kann man es auch außerhalb von div.datatables_Wrapper verschieben?
Artur79

@ Artur79 Leider nein. Zumindest nicht ohne die Quelle von Datatables zu hacken.
Mekwall

2
<333 diese Syntax '<"search-box"r><"H"lf>t<"F"ip>'nicht sicher, ob etwas Schlimmeres existiert
Cristian E.

@ HoàngLong können Sie tatsächlich das Suchfeld mit folgenden Optionen anpassen:language: { search: "example", searchPlaceholder: "example" }
Flimm

8

Dieser hat mir bei DataTables Version 1.10.4 geholfen, weil es eine neue API gibt

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

Beachten Sie das Großbuchstaben "D" von "var oTable = $ ('# myTable'). DataTable ();" ( datatables.net/faqs/#api )
Lionel

6

Neuere Versionen haben eine andere Syntax:

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

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

Beachten Sie, dass in diesem Beispiel die Variable verwendet wird, die tablebeim ersten Initialisieren von Datentabellen zugewiesen wurde. Wenn Sie diese Variable nicht zur Verfügung haben, verwenden Sie einfach:

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

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

Seit: DataTables 1.10

- Quelle: https://datatables.net/reference/api/search ()


4

Dies sollte für Sie funktionieren: (DataTables 1.10.7)

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

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

oder

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

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

4

Ich hatte das gleiche Problem.

Ich habe alle Alternativen ausprobiert, aber keine Arbeit. Ich habe einen Weg gewählt, der nicht richtig ist, aber perfekt funktioniert hat.

Beispiel für eine Sucheingabe

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

der jquery-Code

$('#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();
});

4

Ich möchte der Antwort von @ netbrain noch etwas hinzufügen, das für den Fall relevant ist, dass Sie die serverseitige Verarbeitung verwenden (siehe serverSide) Option ).

Die standardmäßig von Datentabellen durchgeführte Drosselung von Abfragen (siehe Option searchDelay ) gilt nicht für den .search()API-Aufruf. Sie können es mit $ .fn.dataTable.util.throttle () auf folgende Weise zurückerhalten :

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);
});

1

Sie können das div verschieben, wenn die Tabelle mit der fnDrawCallbackFunktion gezeichnet wird .

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

Oder wenn Sie eine neuere Version von datatable verwenden, haben Sie:"drawCallback": function (settings) { $(".dataTables_filter").each(function () { $(this).appendTo($(this).parent().siblings(".panel-body")); }); },
Daniel Dudas

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]); 
   }
});

In erhalten loadtransajax.phpSie möglicherweise den get-Wert:

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

0

Wenn Sie JQuery dataTable verwenden, müssen Sie nur hinzufügen "bFilter":true. Dies zeigt das Standardsuchfeld außerhalb der Tabelle an und funktioniert dynamisch. Wie erwartet

$("#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
        });    

Die Frage war, die Position des dynamisch erstellten zu ändern. Stellen Sie es AUSSERHALB des Tisches
MC
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.