데이터 테이블-데이터 테이블 외부의 검색 상자


답변:


240

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

8
.keypress 대신 .keyup을 사용해야합니다. 그렇지 않으면 결과가 지연 될 수 있습니다
Sævar

1
나는 퍼팅 엉망 $(".dataTables_filter :input").focus().val(value).keypress();에서 keyup이 문제를 발견하기 전에, 한 시간 정도 내 입력에. API를 사용하지 않더라도 .. 우아한 솔루션!
MattSizzle 2014 년

3
JS는 fnFilter 대신 .search ($ (this) .val ()) .draw ()를 사용하도록 변경해야합니다. 참조 : datatables.net/manual/api#Chaining 이 답변을 수정하여 수정했지만 먼저 피어 리뷰가 필요한 것으로 보입니다.
셰인 그랜트

13
비고 : 여전히 "searching : true"옵션이 필요하며 기본 검색 상자를 숨기고 싶을 수 있으므로 sDOM 옵션을 null로 설정하면됩니다.
bang

8
$ (). dataTable ()을 작은 "d"로 인스턴스화하면 DataTables API 인스턴스가 아닌 jQuery 객체가 반환됩니다. 후자는 "oTable = $ ( '# myTable'). DataTable ();"을 호출하여 얻을 수 있습니다. 대문자 "D"로. .search를 호출 할 수 있어야합니다 (그렇지 않으면 "함수 정의되지 않음"오류가 발생하는 경우). 참조 : datatables.net/faqs/#api
Lionel

34

@lvkz 댓글에 따라 :

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

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

@netbrain 대답입니다.

소문자 d로 datatable을 사용하는 경우 .dataTable()(jquery 객체를 반환합니다) 다음을 사용하십시오.

 oTable.fnFilter($(this).val());

4
oTable.fnFilter($(this).val());너무 나를 위해 일했다,
shabeer90

10
두 가지 방법이 방법은 데이터 테이블을 호출에 따라 유효합니다`oTable.search ($ (이) .val ()) (그릴),`당신이 그것을 호출 할 때 사용합니다. .DataTable()이 사람은 : oTable.fnFilter($(this).val());당신은 사용할 때 .dataTable() 의 차이를 수도 D에 있습니다. 도움이 되었기를 바랍니다.
Lvkz

는 "oTable.fnFilter는 기능하지 않습니다"datatables 버전 1.10.5에 대한 오류 제공합니다
EGE 바 이라크

jQuery를 사용하면 다음과 같이 데이터베이스 API에 액세스 할 수도 있습니다. oTable.api().search($(this).val()).draw();특히 페이지 매김 length을 수동으로 제어하려는 경우 유용 할 수 있습니다 .oTable.api().page.len($(this).val()).draw();
Ghis

15

이를 위해 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을 사용할 수 있습니다.


@Marcus : 사실 저는 sDom이 사용하기에 매우 우아하지 않다고 느낍니다. 검색 상자를 완전히 사용자 정의 할 수 없다는 사실을 제쳐두고 (그 상자에 하드 코드 "검색"텍스트가 있습니다).
Hoàng Long 2013

하지만 여전히 div.datatables_Wrapper 안에 있으며 외부로 이동하는 방법도 있습니까?
Artur79 2013

@ Artur79 슬프게도 안돼. 적어도 Datatables의 소스를 해킹하지 않고서는 안됩니다.
mekwall 2013-04-15

2
<333이 구문은 '<"search-box"r><"H"lf>t<"F"ip>'더 나쁜 것이 있는지 확실하지 않습니다
Cristian E.

@ HoàngLong 실제로 다음과 같은 옵션을 사용하여 검색 상자를 사용자 정의 할 수 있습니다.language: { search: "example", searchPlaceholder: "example" }
Flimm

8

이것은 새로운 API가 있기 때문에 DataTables 버전 1.10.4에서 나를 도왔습니다.

var oTable = $('#myTable').DataTable();    
$('#myInputTextField').keyup(function(){
   oTable.search( $(this).val() ).draw();
})

"var oTable = $ ( '# myTable'). DataTable ();"의 대문자 "D"에 유의하십시오. ( datatables.net/faqs/#api )
Lionel

6

최신 버전은 구문이 다릅니다.

var table = $('#example').DataTable();

// #myInput is a <input type="text"> element
$('#myInput').on('keyup change', function () {
    table.search(this.value).draw();
});

이 예제는 tabledatatables가 처음 초기화 될 때 할당 된 변수를 사용합니다 . 이 변수를 사용할 수없는 경우 다음을 사용하십시오.

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


4

이것은 당신을 위해 일할 것입니다. (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();
})

4

나는 같은 문제가 있었다.

게시 된 모든 대안을 시도했지만 작업이 없었고 옳지 않은 방식을 사용했지만 완벽하게 작동했습니다.

검색 입력 예

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

4

서버 측 처리를 사용하는 경우 관련 @netbrain 의 답변 에 한 가지 더 추가하고 싶습니다 ( 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);
});

1

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")); }); },
Daniel Dudas

1
$('#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사용자 가져 오기 값을 나타날 수 있습니다 :

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

0

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

문제는 동적으로 생성 된의 위치를 ​​변경하는 것이 었습니다. 테이블 외부에 놓기
MC
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.