DataTables ( datatables.net )를 사용하고 있으며 검색 상자가 테이블 외부에 있기를 원합니다 (예 : 헤더 div).
이게 가능해 ?
DataTables ( datatables.net )를 사용하고 있으며 검색 상자가 테이블 외부에 있기를 원합니다 (예 : 헤더 div).
이게 가능해 ?
답변:
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() ;
})
$(".dataTables_filter :input").focus().val(value).keypress();
에서 keyup
이 문제를 발견하기 전에, 한 시간 정도 내 입력에. API를 사용하지 않더라도 .. 우아한 솔루션!
@lvkz 댓글에 따라 :
대문자 d와 함께 datatable을 사용하는 경우 .DataTable()
(Datatable API 객체를 반환합니다) 다음을 사용하십시오.
oTable.search($(this).val()).draw() ;
@netbrain 대답입니다.
소문자 d로 datatable을 사용하는 경우 .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" }
이것은 새로운 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
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
이것은 당신을 위해 일할 것입니다. (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 옵션 참조 ).
데이터 테이블에서 기본적으로 수행되는 쿼리 조절 ( 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"));
});
}
});
"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
사용자 가져 오기 값을 나타날 수 있습니다 :
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
});