2011-05-13 82 views

回答

161

您可以使用DataTables API來過濾表格。所以你所需要的只是你自己的輸入字段和一個觸發DataTables的過濾函數的keyup事件。使用CSS或jQuery,你可以隱藏/刪除現有的搜索輸入字段。或者,也許DataTables有一個設置來刪除/不包含它。

簽出關於此的Datatables API文檔。

例子:

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

感謝您的解決方案! – 2011-05-13 10:54:58

+7

你應該肯定使用.keyup而不是.keypress,否則你會遇到延遲結果 – 2013-09-11 15:38:10

+1

我把'$(「。dataTables_filter:input」)。focus().val(value).keypress(); '在我的輸入中'鍵入'大約一個小時,然後才發現這一點。永遠不要使用API​​ ..優雅的解決方案! – MattSizzle 2014-05-03 23:00:45

14

您可以使用此sDom選項。

與搜索輸入默認在自己的div:

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

如果你使用jQuery UIbjQueryUI設置爲true):

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

以上將把搜索/將input元素過濾到它自己的div中,該類別名稱爲search-box,該類別位於實際表格之外。

即使它使用其特殊的速記語法,它實際上也可以使用任何HTML。

+0

@Marcus:實際上我覺得sDom的使用並不高雅,拋開了我們無法完全自定義搜索框(在該框中有一個硬編碼「搜索」文本)的事實。 – 2013-01-23 10:26:35

+0

如果您決定downvote,請說明您的理由。 – mekwall 2013-02-05 01:42:58

+0

但它仍然在div.datatables_Wrapper裏面,還有任何將它移動到它外面的方法? – Artur79 2013-04-15 14:53:14

1

當使用fnDrawCallback函數繪製表格時,您可以移動div。

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

或者如果您使用更新版本的數據表,您將擁有:''drawCallback「:函數(設置)$(」。dataTables_filter「)。each(function(){(0){ $這個).appendTo($(this).parent()。siblings(「。panel-body」)); }); },' – 2015-10-20 20:52:08

8

這一個幫助我的數據表1.10.4版本,因爲它的新的API

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

請注意「var oTable = $('#myTable')。DataTable();」 (https://www.datatables.net/faqs/#api) – Lionel 2015-03-30 07:30:08

28

按@lvkz評論:

如果你正在使用的數據表與大寫d .DataTable()(此將返回一個Datatable API對象)使用這個:

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

這是@n etbrain回答。

如果你正在使用的數據表與小寫字母d .dataTable()(這將返回一個jQuery對象)使用此:

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

'oTable.fnFilter($(this).val());'也爲我工作, – shabeer90 2015-03-20 16:04:11

+10

這兩種方法都是有效的,這取決於你打電話的方式數據表: 'oTable.search($(this).val())。draw();'你在調用時使用:'.DataTable()' 和這個: 'oTable.fnFilter($這個).val());'當你使用'.dataTable()' 區別在於首都D.希望它有幫助! – Lvkz 2015-08-05 20:45:22

+0

給出「oTable.fnFilter不是函數」的數據表版本錯誤1.10.5 – 2016-03-24 12:20:08

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

loadtransajax.php您可能會收到GET值:

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

如果您使用的是JQuery數據表,那麼您只需添加"bFilter":true即可。這將顯示默認的搜索框外的表和它的作品dynamically..as每預計

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

問題是要改變動態創建的位置。把它放在桌子外面 – 2016-01-25 09:25:02

3

這對您來說應該是工作:(數據表1.10.7)

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

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

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

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

更新版本的語法不同:

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

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

請注意,此示例使用首次初始化數據表時分配的變量table。如果你沒有可用這個變量做,只需使用:

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

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

因爲:數據表1.10

- 資料來源:https://datatables.net/reference/api/search()

1

我有同樣的問題。

我嘗試了所有替代方法發佈,但沒有工作,我用了一種不正確的方式,但它的工作完美。

實例搜索輸入

<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

我想一件事添加到您使用服務器端處理的情況下,相關的@netbrain's answer(見serverSide選項)。

數據表默認執行的查詢限制(請參閱searchDelay選項)不適用於.search() API調用。您可以通過以下方式使用$.fn.dataTable.util.throttle()取回:

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