program tip

데이터 테이블-데이터 테이블 외부의 검색 창

radiobox 2020. 8. 3. 08:36
반응형

데이터 테이블-데이터 테이블 외부의 검색 창


DataTables ( datatables.net )를 사용하고 있으며 검색 상자가 테이블 외부에 있어야합니다 (예 : 헤더 div).

이게 가능해 ?


DataTables API를 사용하여 테이블을 필터링 할 수 있습니다. 따라서 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() ;
})

@lvkz 의견에 따라 :

대문자 d와 함께 datatable을 사용하는 경우 .DataTable()(Datatable API 객체를 반환합니다) 다음을 사용하십시오.

 oTable.search($(this).val()).draw() ;

@netbrain 답변입니다.

소문자 d로 datatable을 사용하는 경우 .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을 사용할 수 있습니다.


이것은 새로운 API이기 때문에 DataTables 버전 1.10.4에 도움이되었습니다.

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 ()


이것은 당신을 위해 일해야합니다 : (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();
})

나는 같은 문제가 있었다.

나는 모든 대안을 게시하려고 시도했지만 아무런 효과가 없었지만 옳지 않은 방식으로 완벽하게 작동했습니다.

검색 입력 예

<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);
});

fnDrawCallback함수를 사용하여 테이블을 그릴 때 div를 이동할 수 있습니다.

    $("#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]); 
   }
});

In loadtransajax.php you may receive the get value:

if ($_GET['text_min_val']){
    $sWhere = "WHERE ("; 
    $sWhere .= " t_group_no LIKE '%" . mysql_real_escape_string($_GET['text_min_val']) . "%' ";
    $sWhere .= ')';
}

If you are using JQuery dataTable so you need to just add "bFilter":true. This will display default search box outside table and its works dynamically..as per expected

$("#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
        });    

참고URL : https://stackoverflow.com/questions/5990386/datatables-search-box-outside-datatable

반응형