2016-05-23 15 views
1

Ich habe Beispiele für die Anwendung einzelner Spaltensuchen für jede Spalte einer DataTable entweder über ein Textfeld oder über Dropdownmenüs mit den zurückgegebenen Werten pro Spalte gesehen. Ich habe jedoch noch keinen Mechanismus gefunden, um sie nur auf bestimmte Spalten anzuwenden. Zum Beispiel mit der unten würde das Suchfeld, um alle außer coloumn Null gelten:Individuelle Suche in bestimmten Spalten, DataTable

$('#DataTable tfoot th:gt(0)').each(function() { 
    var title = $(this).text(); 
    $(this).html('<input type="text" 
    style="width:120px;" placeholder="search ' + title + '" />'); 
}); 

Aber wie würde ich es dann entfernen auch aus Spalte 6 & 7 zum Beispiel?

* UPDATE * Diese Frage bezieht sich nur auf serverseitige Verarbeitung. Sollte das früher gesagt haben.

Antwort

2

Ich persönlich benutze Spaltendefinition in Kombination mit iniComplete CallBack. In diesem Beispiel werden zwei Arten von Such, können Sie so viele unterschiedliche Suchanfragen (auch keine Suche)

$('#table').DataTable({ 
      "ajax": { 
       "url": "/flux/ajax", 
       "dataSrc": "data", 
       "scrollX": true 
      }, 
      "columns": [      
       {className: "select", "title": "Status", "data": "stat"} 
       {className: "text", "title": "Libellé", "data": "Lib"}} 
      ], 
      initComplete: function() { 

       this.api().columns().every(function() { 
        var column = this; 
        if ($(column.header()).hasClass('select')) { 
         console.log(column); 
         var select = $('<select><option value="">' + $(column.header()).html() + '</option></select>') 
           .appendTo($(column.header()).empty()) 
           .on('change', function (e) { 
            e.stopImmediatePropagation(); 
            var val = $.fn.dataTable.util.escapeRegex(
              $(this).val() 
              ); 
            column 
              .search(val ? '^' + val + '$' : '', true, false) 
              .draw(); 
            return false; 
           }); 
         column.data().unique().sort().each(function (d, j) { 
          select.append('<option value="' + d + '">' + d + '</option>'); 
         }); 
        } else if ($(column.header()).hasClass('text')) { 
         var text = $('<input type="text" placeholder="' + $(column.header()).html() + '" />') 
           .appendTo($(column.header()).empty()) 
           .on('keyup change', function() { 
            var val = $.fn.dataTable.util.escapeRegex(
             $(this).val() 
             ); 
            if (column.search() !== this.value) { 
             column 
               .search(val) 
               .draw(); 
            } 
            return false; 
           }); 

        } 

       }); 
      } 
     }); 
+0

Hallo Sylvain, vielleicht füge ich hinzugefügt von sollte, dass dies die gesamte Verarbeitung Server-Seite ist. Gute Arbeit, ich kann sehen, wie das funktioniert. – CSharpNewBee