2015-11-19 14 views
6

Tôi đang cố gắng kết hợp tìm kiếm cột và tìm kiếm thông thường trên các cột cụ thể.Tôi làm cách nào để tìm kiếm nhiều cột trong DataTables?

Nếu bạn xem this example, tôi muốn có thể tìm kiếm các cột NamePosition, với tìm kiếm "bình thường" và bỏ qua phần còn lại, nhưng tôi vẫn muốn có thể chọn giá trị tại dưới cùng của cột Office.

Tôi đã cố gắng sử dụng này:

columnDefs: [{ 
    targets: [2], 
    searchable: false 
}] 

Nhưng điều này cũng vô hiệu hóa việc tìm kiếm cột.
Tôi cũng đã cố gắng để viết một tìm kiếm tùy chỉnh trên nhiều cột:

var search = 'Software'; 
$('#example').DataTable().column(0).search(search).draw(); 
$('#example').DataTable().column(1).search(search).draw(); 

Nhưng điều này chỉ cho thấy các hàng nơi CẢ cột chứa giá trị tìm kiếm, thay vì 1 trong số họ. (không xảy ra).

Tôi cũng đã thử số columns().search(), nhưng điều này mang lại kết quả tương tự như tìm kiếm tùy chỉnh ở trên.

Làm cách nào tôi có thể bật tìm kiếm cột riêng lẻ, nhưng vô hiệu hóa cùng một cột khỏi tìm kiếm tổng thể?

Trả lời

10

Bạn có thể ghi đè lên xây dựng trong tìm kiếm/lọc với một custom filter:

$('.dataTables_filter input').unbind().on('keyup', function() { 
    var searchTerm = this.value.toLowerCase(); 
    $.fn.dataTable.ext.search.push(function(settings, data, dataIndex) { 
     //search only in column 1 and 2 
     if (~data[0].toLowerCase().indexOf(searchTerm)) return true; 
     if (~data[1].toLowerCase().indexOf(searchTerm)) return true; 
     return false; 
    }) 
    table.draw(); 
    $.fn.dataTable.ext.search.pop(); 
}) 

Bằng cách này, "tìm kiếm thông thường" chỉ áp dụng cho hai cột đầu tiên, NamePosition - và bạn vẫn làm việc chọn hộp ở chân. Forked fiddle ->https://jsfiddle.net/g9gLjtjh/

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