数据表 - 数据表外的搜索框

Ath*_*dis 110 search jquery filtering datatables

我正在使用DataTables(datatables.net),我希望我的搜索框在表格之外(例如在我的标题div中).

这可能吗 ?

net*_*ain 221

您可以使用DataTables api过滤表.所以你需要的只是你自己的输入字段,其中一个keyup事件触发了DataTables的过滤功能.使用css或jquery,您可以隐藏/删除现有的搜索输入字段.或者DataTables可能有删除/不包含它的设置.

在此查看Datatables API文档.

例:

HTML

<input type="text" id="myInputTextField">
Run Code Online (Sandbox Code Playgroud)

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() ;
})
Run Code Online (Sandbox Code Playgroud)

  • 备注:您仍然需要"搜索:true"选项,然后您可能希望隐藏默认搜索框,因此只需将sDOM选项设置为null即可. (12认同)
  • 你绝对应该使用.keyup而不是.keypress,否则你会遇到结果延迟 (8认同)
  • 使用小"d"实例化$().dataTable()将返回jQuery对象而不是DataTables API实例.后者可以通过调用"oTable = $('#myTable')来实现.DataTable();" 用大写字母"D".这需要能够在其上调用.search(否则会抛出"函数未定义"错误).请参阅:https://www.datatables.net/faqs/#api (8认同)
  • JS需要更改为使用.search($(this).val()).draw()代替fnFilter.请参阅:https://datatables.net/manual/api#Chaining我更改了此答案以解决此问题,但似乎需要首先进行同行评审. (3认同)

ziz*_*jab 32

根据@lvkz评论:

如果您使用带有大写d .DataTable()的数据表(这将返回一个Datatable API对象),请使用以下命令:

 oTable.search($(this).val()).draw() ;
Run Code Online (Sandbox Code Playgroud)

这是@netbrain的答案.

如果你使用小写d的数据表.dataTable()(这将返回一个jquery对象)使用这个:

 oTable.fnFilter($(this).val());
Run Code Online (Sandbox Code Playgroud)

  • 这两种方法都是有效的,这取决于你如何调用数据表:`oTable.search($(this).val()).draw();`你在调用它时使用:`.DataTable()`和这一个:`oTable.fnFilter($(this).val());`当你使用`.dataTable()时`差别在于首都D.希望它有所帮助! (10认同)
  • `oTable.fnFilter($(this).val());`也为我工作过, (4认同)

Abo*_*eri 18

对于最新版本的 DataTables,您应该按照以下步骤操作:

1-searching选项必须是true.

2-隐藏默认搜索输入:

.dataTables_filter {
    display: none;
}
Run Code Online (Sandbox Code Playgroud)

3-添加新的搜索输入:

<input type="text" id="search">
Run Code Online (Sandbox Code Playgroud)

4- 请求搜索:

$('#search').keyup(function() {
    var table = $('.table-meetups').DataTable();
    table.search($(this).val()).draw();
});
Run Code Online (Sandbox Code Playgroud)


mek*_*all 14

您可以使用此sDom选项.

在其自己的div中使用搜索输入默认:

sDom: '<"search-box"r>lftip'
Run Code Online (Sandbox Code Playgroud)

如果你使用jQuery UI(bjQueryUI设置为true):

sDom: '<"search-box"r><"H"lf>t<"F"ip>'
Run Code Online (Sandbox Code Playgroud)

上面的内容将把search/filtering input元素放入它自己div的类中,这个类名search-box于实际表之外.

即使它使用其特殊的简写语法,它实际上可以使用你抛出的任何HTML.

  • <333这个语法`'<"搜索框"r> <"H"lf> t <"F"ip>'`不确定是否存在更糟糕的事情 (2认同)

小智 8

这个帮助我获得DataTables版本1.10.4,因为它的新API

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


Jon*_*nny 6

更新的版本具有不同的语法:

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

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

请注意,此示例使用table首次初始化数据表时指定的变量.如果您没有此变量,只需使用:

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

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

自:DataTables 1.10

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


Bru*_*iro 5

我有同样的问题。

我尝试了所有发布的替代方案,但没有成功,我使用了一种不正确但效果很好的方法。

示例搜索输入

<input id="searchInput" type="text"> 
Run Code Online (Sandbox Code Playgroud)

jquery代码

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

$("#searchInput").on("input", function (e) {
   e.preventDefault();
   $('#listingData').DataTable().search($(this).val()).draw();
});
Run Code Online (Sandbox Code Playgroud)


cit*_*txx 5

我想在@netbrain 的答案中添加一件事,以防您使用服务器端处理(请参阅服务器端选项)。

数据表默认执行的查询限制(请参阅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);
});
Run Code Online (Sandbox Code Playgroud)