【发布时间】:2011-08-24 19:49:36
【问题描述】:
我正在使用 DataTables (datatables.net),我希望我的搜索框位于表格之外(例如在我的标题 div 中)。
这可能吗?
【问题讨论】:
标签: jquery search datatables filtering
我正在使用 DataTables (datatables.net),我希望我的搜索框位于表格之外(例如在我的标题 div 中)。
这可能吗?
【问题讨论】:
标签: jquery search datatables filtering
您可以使用 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() ;
})
【讨论】:
$(".dataTables_filter :input").focus().val(value).keypress(); 放在keyup 的输入上大约一个小时,然后才找到这个。从来没有使用过 API.. 优雅的解决方案!
根据@lvkz 评论:
如果您正在使用带有大写 d .DataTable() 的数据表(这将返回一个 Datatable API 对象),请使用:
oTable.search($(this).val()).draw() ;
这是@netbrain 的答案。
如果你正在使用带有小写 d .dataTable() 的数据表(这将返回一个 jquery 对象),请使用:
oTable.fnFilter($(this).val());
【讨论】:
oTable.fnFilter($(this).val()); 也为我工作,
oTable.fnFilter($(this).val()); 当您使用 .dataTable() 时,区别在于大写 D。希望对您有所帮助!
oTable.api().search($(this).val()).draw(); 它可能很有用,特别是如果您还想手动控制分页length:oTable.api().page.len($(this).val()).draw();
您可以为此使用sDom 选项。
默认在自己的 div 中输入搜索:
sDom: '<"search-box"r>lftip'
如果你使用 jQuery UI(bjQueryUI 设置为 true):
sDom: '<"search-box"r><"H"lf>t<"F"ip>'
上面将搜索/过滤input 元素放入它自己的div 中,其中一个名为search-box 的类位于实际表之外。
即使它使用其特殊的速记语法,它实际上也可以接受你扔给它的任何 HTML。
【讨论】:
language: { search: "example", searchPlaceholder: "example" }
这个帮助我实现了 DataTables 版本 1.10.4,因为它的新 API
var oTable = $('#myTable').DataTable();
$('#myInputTextField').keyup(function(){
oTable.search( $(this).val() ).draw();
})
【讨论】:
我遇到了同样的问题。
我尝试了所有发布的替代方法,但没有奏效,我使用了一种不正确的方法,但效果很好。
搜索输入示例
<input id="searchInput" type="text">
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();
});
【讨论】:
最近的版本有不同的语法:
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
【讨论】:
如果您使用服务器端处理,我想在@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);
});
【讨论】:
这应该适合你:(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();
})
【讨论】:
对于最近和新版本的 DataTables,您应该按照以下步骤操作:
1- searching 选项必须是 true。
2- 隐藏默认搜索输入:
.dataTables_filter {
display: none;
}
3- 添加新的搜索输入:
<input type="text" id="search">
4- 请求搜索:
$('#search').keyup(function() {
var table = $('.table-meetups').DataTable();
table.search($(this).val()).draw();
});
【讨论】:
您可以在使用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")); }); },
$('#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 .= ')';
}
【讨论】:
如果您使用的是 JQuery 数据表,那么您只需添加 "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
});
【讨论】: