Estoy usando DataTables (datatables.net) y me gustaría que mi cuadro de búsqueda esté fuera de la tabla (por ejemplo, en mi div de encabezado).Datatables - Cuadro de búsqueda fuera de la tabla de datos
¿Esto es posible?
Estoy usando DataTables (datatables.net) y me gustaría que mi cuadro de búsqueda esté fuera de la tabla (por ejemplo, en mi div de encabezado).Datatables - Cuadro de búsqueda fuera de la tabla de datos
¿Esto es posible?
Puede usar la API DataTables para filtrar la tabla. Entonces, todo lo que necesita es su propio campo de entrada con un evento de activación que activa la función de filtro en DataTables. Con css o jquery puede ocultar/eliminar el campo de entrada de búsqueda existente. O tal vez DataTables tiene una configuración para eliminar/no incluirlo.
Consulte la documentación de la API Datatables sobre esto.
Ejemplo:
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() ;
})
Usted puede utilizar la opción sDom
para esto.
defecto con entrada de búsqueda en su propio div:
sDom: '<"search-box"r>lftip'
Si utiliza jQuery UI (bjQueryUI
conjunto de true
):
sDom: '<"search-box"r><"H"lf>t<"F"ip>'
Lo anterior poner la búsqueda/filtrando el elemento input
en su propio div
con una clase llamada search-box
que está fuera de la tabla actual .
Aunque utiliza su sintaxis abreviada especial, puede tomar cualquier HTML que le arroje.
@Marcus: de hecho, creo que sDom no es muy elegante de usar, aparte el hecho de que no podemos personalizar completamente el cuadro de búsqueda (hay un texto de "búsqueda" de código duro en ese cuadro). –
Si decide rechazar, indique su razón. – mekwall
pero todavía está dentro de div.datatables_Wrapper, ¿hay alguna manera de moverlo fuera de él también? – Artur79
Puede mover el div cuando la tabla se dibuja utilizando la función fnDrawCallback
.
$("#myTable").dataTable({
"fnDrawCallback": function (oSettings) {
$(".dataTables_filter").each(function() {
$(this).appendTo($(this).parent().siblings(".panel-body"));
});
}
});
O si usa una versión más nueva de datatable, tendrá:' "drawCallback": function (settings) { $ (". dataTables_filter"). each (function() { $ (this) .appendTo ($ (this) .parent(). brothers (". panel-body")); }); }, ' –
Éste me ayudó para DataTables versión 1.10.4, porque su nueva API
var oTable = $('#myTable').DataTable();
$('#myInputTextField').keyup(function(){
oTable.search($(this).val()).draw();
})
Tenga en cuenta la" D "mayúscula de" var oTable = $ ('# myTable'). DataTable(); " (https://www.datatables.net/faqs/#api) – Lionel
Según comentario @lvkz:
si está utilizando tabla de datos con D mayúscula .DataTable()
(esto devolverá un objeto API Datatable) use esto:
oTable.search($(this).val()).draw() ;
que es @n respuesta etbrain.
si está utilizando tabla de datos con d minúscula .dataTable()
(esto devolverá un objeto jQuery) usan este:
oTable.fnFilter($(this).val());
'oTable.fnFilter ($ (this) .val());' Funcionó para mí también, – shabeer90
Ambos métodos son válidos, dependiendo de cómo llame la tabla de datos: 'oTable.search ($ (this) .val()). draw();' lo usa cuando lo llama: '.DataTable()' y este: 'oTable.fnFilter ($ (this) .val()); 'cuando utiliza' .dataTable() ' La diferencia está en la capital D. ¡Espero que ayude! – Lvkz
Da un error "oTable.fnFilter no es una función" para datatables versión 1.10.5 –
$('#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]);
}
});
En loadtransajax.php
puede recibir el valor get:
if ($_GET['text_min_val']){
$sWhere = "WHERE (";
$sWhere .= " t_group_no LIKE '%" . mysql_real_escape_string($_GET['text_min_val']) . "%' ";
$sWhere .= ')';
}
Si está utilizando JQuery dataTable, solo tiene que agregar "bFilter":true
. Esto mostrará la caja de búsqueda predeterminado mesa fuera y sus obras dynamically..as por esperada
$("#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
});
La cuestión era cambiar la posición de la creación dinámica. Poniéndolo FUERA de la mesa –
Este trabajo debe ser para usted: (1.10.7) DataTables
oTable = $('#myTable').dataTable();
$('#myInputTextField').on('keyup change', function(){
oTable.api().search($(this).val()).draw();
})
o
oTable = $('#myTable').DataTable();
$('#myInputTextField').on('keyup change', function(){
oTable.search($(this).val()).draw();
})
Las versiones más recientes tienen una sintaxis diferente:
var table = $('#example').DataTable();
// #myInput is a <input type="text"> element
$('#myInput').on('keyup change', function() {
table.search(this.value).draw();
});
Tenga en cuenta que este ejemplo utiliza la variable table
asignada cuando las tablas de datos se inicializan por primera vez. Si usted no tiene esta variable disponible, basta con utilizar:
var table = $('#example').dataTable().api();
// #myInput is a <input type="text"> element
$('#myInput').on('keyup change', function() {
table.search(this.value).draw();
});
desde: DataTables 1.10
que tenían el mismo problema.
Probé todas las alternativas publicadas, pero no funcionaba, utilicé una forma que no está bien pero funcionó perfectamente.
Ejemplo de búsqueda de código de entrada
<input id="serachInput" type="text">
el 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();
});
quiero añadir una cosa más a la @netbrain's answer relevante en caso de que utilice el procesamiento del lado del servidor (ver serverSide opción).
La aceleración de consultas realizada de forma predeterminada por datatables (consulte la opción searchDelay) no se aplica a la llamada a la API .search()
. Puede recuperarlo utilizando $.fn.dataTable.util.throttle() de la siguiente manera:
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);
});
¡Gracias por la solución! –
Definitivamente debe usar .keyup en lugar de .keypress, de lo contrario, experimentará un retraso en los resultados –
Me equivoqué al poner '$ (". DataTables_filter: input "). Focus(). Val (value) .keypress(); 'en' keyup' en mi entrada durante aproximadamente una hora, antes de encontrar esto. Nunca pensé usar la API .. ¡Solución elegante! – MattSizzle