Я использую DataTables ( datatables.net ) и хочу, чтобы мое поле поиска находилось за пределами таблицы (например, в моем заголовке div).
Это возможно ?
Я использую DataTables ( datatables.net ) и хочу, чтобы мое поле поиска находилось за пределами таблицы (например, в моем заголовке div).
Это возможно ?
Ответы:
Вы можете использовать API DataTables для фильтрации таблицы. Итак, все, что вам нужно, это ваше собственное поле ввода с событием 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() ;
})
$(".dataTables_filter :input").focus().val(value).keypress();
в keyup
свой ввод около часа, прежде чем обнаружил это. Ни в коем случае не использовать API .. Шикарное решение!
Согласно комментарию @lvkz:
если вы используете datatable с заглавной буквой d .DataTable()
(это вернет объект API Datatable), используйте это:
oTable.search($(this).val()).draw() ;
это ответ @netbrain.
если вы используете datatable с нижним регистром d .dataTable()
(это вернет объект jquery), используйте это:
oTable.fnFilter($(this).val());
oTable.fnFilter($(this).val());
.DataTable()
и этот: 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-код, который вы ему вводите.
'<"search-box"r><"H"lf>t<"F"ip>'
не уверен, существует ли что-то худшее,
language: { search: "example", searchPlaceholder: "example" }
Это помогло мне с DataTables версии 1.10.4, потому что его новый API
var oTable = $('#myTable').DataTable();
$('#myInputTextField').keyup(function(){
oTable.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
- Источник: https://datatables.net/reference/api/search ()
Это должно сработать для вас: (Таблицы данных 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();
})
У меня такая же проблема.
Я пробовал все опубликованные альтернативы, но безуспешно, я использовал неправильный способ, но он работал отлично.
Пример ввода для поиска
<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();
});
Я хочу добавить еще одну вещь к ответу @ netbrain, если вы используете обработку на стороне сервера (см. Параметр serverSide ).
Запрос дросселирование по умолчанию выполняется с помощью DataTables (см 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);
});
Вы можете перемещать div, когда таблица рисуется с помощью fnDrawCallback
функции.
$("#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 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
});