Я использую DataTables (datatables.net), и я бы хотел, чтобы окно поиска было вне таблицы (например, в моем заголовке div).
Возможно ли это?
Я использую DataTables (datatables.net), и я бы хотел, чтобы окно поиска было вне таблицы (например, в моем заголовке div).
Возможно ли это?
Вы можете использовать APT DataTables для фильтрации таблицы. Таким образом, все, что вам нужно, это ваше собственное поле ввода с событием keyup, которое запускает функцию фильтра в DataTables. С помощью css или jquery вы можете скрыть/удалить существующее поле ввода поиска. Или, может быть, DataTables имеет параметр для удаления/не включать его.
Ознакомьтесь с документацией API Datatables.
Пример:
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() ;
})
В соответствии с комментарием @lvkz:
 если вы используете datatable с верхним регистром d .DataTable() (это вернет объект API Datatable), используйте это:
 oTable.search($(this).val()).draw() ;
который является ответом @netbrain.
 если вы используете datatable с нижним регистром d .DataTable() (это вернет объект jquery), используйте это:
 oTable.fnFilter($(this).val());
Вы можете использовать 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, который вы на него набрасываете.
Это помогло мне в DataTables Version 1.10.4, потому что его новый API
var oTable = $('#myTable').DataTable();    
$('#myInputTextField').keyup(function(){
   oTable.search( $(this).val() ).draw();
})
Это должно работать для вас: (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();
})
Более поздние версии имеют другой синтаксис:
var table = $('#example').DataTable();
// #myInput is a <input type="text"> element
$('#myInput').on('keyup change', function () {
    table.search(this.value).draw();
});
Обратите внимание, что в этом примере используется переменная table, назначенная при первом инициализации datatables. Если у вас нет этой переменной, просто используйте:
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()
Я хочу добавить еще одну вещь в ответ @netbrain, соответствующий в случае использования серверной обработки (см. serverSide).
Дросселирование запроса, выполняемое по умолчанию с помощью datatables (см. searchDelay), не применяется к вызову API .search(). Вы можете вернуть его, используя $. 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"));
        });
    }
});
$('#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 .= ')';
}
У меня была та же проблема.
Я пробовал все опубликованные варианты, но не работал, я использовал способ, который не прав, но он отлично работал.
Пример ввода ввода
<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();
});
Если вы используете 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
        });