2013-07-13 35 views
18

Tôi đang sử dụng phiên bản mới nhất của jQuery DataTables. Tôi muốn sử dụng bộ lọc cột riêng lẻ trên mỗi bảng để sử dụng plugin bộ lọc cột nhưng tôi chỉ nhận được các hộp tìm kiếm ở chân trang. Tôi muốn đặt trong tiêu đềCách đặt bộ lọc cột DataTables ở trên cùng

$(document).ready(function() { 
var oTable=$("#example").dataTable({ 
     "bJQueryUI": true, 
     "sScrollX": "100%", 
     "aLengthMenu": [[5, 15, 50, 100], [5, 15, 50, "l00"]], 
     "iDisplayLength": 10, 
     "sPaginationType": "full_numbers", 
     "sDom": '<"top"if>rt<"bottom"lp><"clear">' 

    }).columnFilter({"sPlaceHolder":"head :before", 
    "aoColumns": [{ "type": "text" }, { "type": "text" }, null, null, null, null, { "type": "text" }, null, { "type": "text" }, { "type": "text" }, { "type": "text" }, 

Làm cách nào để đặt nó lên đầu bảng?

Trả lời

31

Phương pháp 1 (CSS)

Bạn có thể thay đổi CSS để

tfoot { 
    display: table-header-group; 
} 

Phương pháp 2 (Javascript)

Đặt những thứ lọc hàng vào thead như TDs (không THS) và thay đổi

$("tfoot input") 

để

$("thead input") 
+0

cảm ơn câu trả lời của bạn, nhưng xin lỗi vì không nhận được phương pháp thứ 2..có thể giải thích ngắn gọn .. – shan

+0

Bạn có thể sử dụng phương pháp 1 đơn giản nhất. http://datatables.net/release-datatables/examples/api/multi_filter.html sẽ cho bạn biết thêm về phương pháp 2 – asprin

+0

iam bằng cách sử dụng css này, nhưng nó không hoạt động .. – shan

16

Bạn có thể di chuyển nó đến vị trí đầu bảng của bạn bằng cách thêm tham số 'sPlaceHolder'

}).columnFilter({ 
    sPlaceHolder: "head:after", 
    aoColumns: [ ... 
4

Hãy thử điều này

$(document).ready(function() { 
$('#mytable thead td').each(function() { 
     var title = $('#mytable thead th').eq($(this).index()).text(); 
     $(this).html('<input type="text" placeholder="Search '+title+'" />'); 
}); 
$("#mytable thead input").on('keyup change', function() { 
     table 
      .column($(this).parent().index()+':visible') 
      .search(this.value) 
      .draw(); 
}); 
}); 
+0

Cảm ơn .. Bạn đã tiết kiệm thời gian của tôi :) –

6

Sử dụng sPlaceHolder tùy chọn:

sPlaceHolder: "head:before" 

ví dụ:

dataTable.columnFilter({ 
    sPlaceHolder: "head:before", 
    aoColumns: [ 
     { type: "select" }, 
     { type: "select" },   
     { type: "select" }, 
     { type: "select" }, 
     { type: "select" } 
    ] 
}); 

xem demo ->http://jsfiddle.net/JNxj5/

7

Đơn giản chỉ cần sử dụng mã javascript sau (ở đây 'dụ' là id của bảng của bạn):

$('#example tfoot tr').insertAfter($('#example thead tr'))

4

Trong CSS bạn có thể sử dụng

display: table-header-group; //on tfoot

display: table-row-group; //on thead

Bạn sẽ nhận được họ vị trí như thế này:

tfoot 
thead 
tbody 
+0

Tôi đã có một vấn đề liên quan, ngoại trừ tôi muốn 'thead' trên đầu trang, 'tfoot' ngay bên dưới nó, và phần còn lại của các hàng sau đó. Vì 'thead' đã ở trên cùng của HTML, và 'tfoot' ngay sau nó, thiết lập 'display: table-row-group' trên phần tử 'tfoot' hoạt động tốt. Nó hiện hiển thị chính xác trên Chrome và IE10. – EdwinW

1
CSS: 
tfoot input { 
    width: 100%; 
    padding: 3px; 
    box-sizing: border-box; 
} 
tfoot { 
display: table-header-group;} 

Script: 
$(document).ready(function() { 
// Setup - add a text input to each footer cell 
$('#example tfoot th').each(function() { 
    var title = $(this).text(); 
    $(this).html('<input type="text" placeholder="Search '+title+'" />'); 
}); 

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

// Apply the search 
table.columns().every(function() { 
    var that = this; 

    $('input', this.footer()).on('keyup change', function() { 
     if (that.search() !== this.value) { 
      that 
       .search(this.value) 
       .draw(); 
     } 
    }); 
}); 

});

+0

Vui lòng chỉnh sửa câu trả lời của bạn để giải thích cách giải quyết vấn đề của OP và giải thích mã nào. Các câu trả lời chỉ có mã được khuyến khích trên SO. Cảm ơn! –

Các vấn đề liên quan