JQuery Datatables. 初始化表格时设置某一列的默认搜索值

11

我正在使用服务器端处理功能的datatable 1.10.15。当表格初始化时,我希望为列搜索设置值。

我尝试了下面的方法,但没有成功:

$('#dataTable').DataTable({
    ...
    columns:[
        ....
        {name:'name', search:{value:'q'}}
        ....
    ]
});

1
根据datatable文档,您可以使用“searchCols”参数。请参见下面的答案。 - NKSM
4个回答

18

您可以尝试:

$('#example').dataTable( {
  "search": {
    "search": "Fred"
  }
});

它将在搜索列中使用Fred初始化数据表。

演示链接

参考文献


谢谢,但这是全局搜索。我想只在某些列中进行搜索。 - Andriy Lozynskiy
根据您的查询进行相应的操作。 - Mayank Pandeyz
@MayankPandeyzyes,我看到它填充了文本框,但数据没有被过滤。我通过使用“deferLoading:true”创建datatable并设置搜索框来使其工作,然后使用DataTable.draw()使用搜索参数进行ajax调用。效果很好。 - M H
您可以创建一个函数来呈现服务器端的数据表格,并在页面加载时传递初始值,并通过考虑此值编写查询。 - Mayank Pandeyz
这不是问题的确切答案,但这正是我在寻找的。服务器端分页也可以使用。谢谢。 - Firnas
如果stateSave为true,那么DataTables可能会用本地存储的状态覆盖“Fred”。您可以使用在此处找到的示例stateLoadParams来覆盖此行为。 https://datatables.net/reference/option/stateLoadParams - undefined

6

这里可以使用SearchCols

基本上与搜索选项相同,但是在这种情况下是针对单个列而不是全局过滤器,该选项定义了在初始化期间应用于表格的过滤器。

数组必须与列数相同,并且每个元素都必须是一个具有参数搜索和escapeRegex(后者是可选的)的对象。'null'也被接受并将使用默认值。

例子:

$('#example').dataTable( {
  "searchCols": [
    null,
    { "search": "My filter" },
    null,
    { "search": "^[0-9]", "escapeRegex": false }
  ]
} );

这是初始化Datatable时设置默认搜索值的唯一正确解决方案。这在Datatable文档中有所体现。
更多信息:https://datatables.net/reference/option/searchCols 工作示例:http://live.datatables.net/piqidoqo/603/edit

我不确定你在评论中所说的意思。我的代码将搜索设置在特定列上,而不是全局过滤器。 - M H
那不是全局过滤器。您不必为数据表定义变量。因此,可以通过初始化数据表来定义“搜索值”。 - NKSM
对于全局过滤器,我仍然不确定你在说什么。 - M H
1
我想与其他用户分享我的答案,因为在这种情况下searchCols是针对单个列而不是全局过滤器的,该选项定义了在初始化期间应用于表格的过滤器。如果您不了解什么是全局过滤器,那么您应该阅读Datatable文档,请不要设置负评。 - NKSM

3

我曾经也需要做同样的事情。我通过使用延迟加载创建数据表,填充搜索文本,然后使用搜索参数进行Ajax调用,最终使其生效。

var Datatable = DataTable({
 deferLoading:true
 ... other options
});

//set search text on specific column
DataTable.columns(columnIndex).search('default search text'); 

//make ajax to call server
DataTable.draw(); 

0

这可能有效!但是,在这里,您必须提供该列的位置,而不是名称。

$( document ).ready(function() {
   var table = $('#dataTable').DataTable();
   table
        .columns( 3 )
        .search( "Your_Value" )
        .draw();
});

这里的3只是一个例子。请使用您的列位置代替3 参考 这里


我之前尝试过这个解决方案,它是有效的,但我遇到了一些问题。我没有使用分页,而是先加载所有数据,然后再用筛选器重新绘制表格。如果记录很多,它会拖慢页面速度。但目前这是我找到的最好的解决方案。 - Andriy Lozynskiy
如果您不想一开始加载整个数据,请更改您的SQL查询。在查询本身中提供名称过滤器。 - Kaushik C

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接