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


Answers:


240

您可以使用DataTables api过滤表。因此,您所需要的只是您自己的输入字段,其中包含一个keyup事件,该事件触发对DataTables的过滤器功能。使用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() ;
})

8
你一定要使用.keyup代替.keypress,否则你会在结果出现延迟
Sævar

1
我把事情搞糟与投入$(".dataTables_filter :input").focus().val(value).keypress();keyup我输入了大约一个小时,发现在此之前。绝对不要使用API​​。优雅的解决方案!
MattSizzle 2014年

3
JS需要更改为使用.search($(this).val()).draw()代替fnFilter。请参阅:datatables.net/manual/api#Chaining我更改了此答案以解决此问题,但似乎需要首先进行同行评审。
Shane Grant

13
备注:您仍将需要“ searching:true”选项,然后您可能希望隐藏默认搜索框,因此只需将sDOM选项设置为null。
2014年

8
用小“ d”实例化$()。dataTable()将返回一个jQuery对象而不是DataTables API实例。后者可以通过调用“ oTable = $('#myTable')。DataTable();”来实现。大写字母“ D”。这要求能够在其上调用.search(否则将引发“函数未定义”错误)。请参阅:datatables.net/faqs/#api
Lionel

34

根据@lvkz注释:

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

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

这是@netbrain的答案。

如果您使用带有小写字母d的数据表.dataTable()(这将返回一个jquery对象),请使用以下命令:

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

4
oTable.fnFilter($(this).val());也为我工作,
shabeer90

10
这两种方法都是有效的,这取决于你是如何调用数据表:`oTable.search($(本).VAL())绘制();`当你调用它,你使用:.DataTable()这一个: oTable.fnFilter($(this).val());当您使用.dataTable() 的差异在首都D。希望能对您有所帮助!
Lvkz 2015年

对于数据表版本1.10.5给出了“ oTable.fnFilter不是函数”错误
Ege Bayrak

刚刚发现,使用jQuery也可以像这样访问Database API:oTable.api().search($(this).val()).draw();它很有用,尤其是如果您还希望手动控制分页时lengthoTable.api().page.len($(this).val()).draw();
Ghis,

15

您可以sDom为此使用选项。

默认值,其搜索输入位于其自己的div中:

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

如果您使用jQuery UIbjQueryUI设置为true):

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

上面的代码将把search / filtering input元素放置在实际表之外的divsearch-box中。

即使使用特殊的速记语法,它实际上也可以使用您向其抛出的任何HTML。


@Marcus:实际上,我觉得sDom使用起来不是很优雅,撇开我们不能完全自定义搜索框的事实(该框中有一个硬编码的“搜索”文本)。
晃龙

但它仍然位于div.datatables_Wrapper中,是否也可以将其移出它?
Artur79 2013年

@ Artur79可悲的是没有。至少并非没有破解数据表的来源。
mekwall

2
<333这种语法'<"search-box"r><"H"lf>t<"F"ip>'不确定是否存在更糟的情况
Cristian E.

@HoàngLong您实际上可以使用以下选项来自定义搜索框:language: { search: "example", searchPlaceholder: "example" }
Flimm

8

这对DataTables 1.10.4版很有帮助,因为它的新API

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

注意“ var oTable = $('#myTable')。DataTable();”的大写字母“ D”。(datatables.net/faqs/#api
梅西

6

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

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

由于:DataTables 1.10

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


4

这应该为您工作:(DataTables 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();
})

4

我有同样的问题。

我尝试了所有已发布的替代方法,但是没有任何工作,我使用了不正确的方法,但是效果很好。

搜索输入示例

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

4

如果您使用服务器端处理,我想在@netbrain的答案中添加另一件事(请参阅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);
});

1

使用fnDrawCallback函数绘制表格时,可以移动div 。

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

或者,如果您使用数据表的较新版本,则您将拥有:"drawCallback": function (settings) { $(".dataTables_filter").each(function () { $(this).appendTo($(this).parent().siblings(".panel-body")); }); },
Daniel Dudas 2015年

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 dataTable,则只需添加即可"bFilter":true。这将在表外显示默认搜索框,并按预期动态运行。

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

问题是要更改动态创建的位置。放在桌子外面
MC
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.