2012-09-20 21 views
9

Tôi đang sử dụng jQuery DataTables plugin và gặp sự cố nhỏ với tính năng lọc trong đó. Nếu tôi có một ô bảng có nội dung như <a href='foo6'>Blah</a> và tôi lọc cho "6", ô đó sẽ hiển thị, mặc dù không có "6" trong "Blah". Những gì tôi muốn làm là có plug-in DataTables bỏ qua HTML khi thực hiện lọc.Làm cách nào để bỏ qua HTML khi lọc bảng dữ liệu jQuery?

Tôi đã cố gắng cọ rửa trang web DataTables và tìm thấy các khách hàng tiềm năng xung đột, không hữu ích. Một bài viết gợi ý rằng tôi cần một tùy chọn sType:'html' trong định nghĩa của aaColumn của tôi, nhưng tôi đã thử nó và nó không giúp ... cộng với một bài sau đó cho thấy phiên bản hiện tại của DataTables tự động phát hiện HTML sType. Tôi cũng đã tìm thấy đoạn mã này:

// Make filtering ignore HTML (see http://datatables.net/plug-ins/filtering) 
$.fn.dataTableExt.ofnSearch['html'] = function (sData) { 
    var n = document.createElement('div'); 
    n.innerHTML = sData; 
    if (n.textContent) { 
     return n.textContent.replace(/\n/g," "); 
    } else { 
     return n.innerText.replace(/\n/g," "); 
    } 
}; 

được cho là sửa chữa mọi thứ ... nhưng không. Vì vậy, câu hỏi của tôi là: có ai ngoài kia biết cách làm cho DataTables bỏ qua nội dung không phải văn bản (ví dụ: HTML) khi lọc các hàng không? Không.

Trả lời

6

Hóa ra tôi cần một chức năng tùy chỉnh mRender trên tiêu đề cột của tôi. Quan trọng hơn (vì tôi đã thử điều này lúc đầu mà không kiểm tra đối số "loại"), bạn cần sử dụng đối số kiểu được cung cấp cho hàm đó để làm cho nó chỉ áp dụng khi lọc.

kết quả cuối cùng của tôi trông như thế này:

aaHeaders: [{ 
    mRender: function(data, type, full) { 
     // If we're filtering, don't look at the HTML; only filter on the text 
     return type == 'filter' ? $(data).text() : data 
    } 
}], //... 
+0

Tôi không thể giải pháp này để làm việc Bạn có thực hiện bất kỳ thay đổi nào khác không? – MadChuckle

+0

Không phải tôi nhớ, xin lỗi – machineghost

+0

Đã làm việc cho tôi. Cảm ơn! – Ross

1

Bạn có thể thử cái này:

$.fn.dataTableExt.ofnSearch['html'] = function (sData) { 
    return $("<div/>").html(sData).text(); 
} 
+0

Cảm ơn bạn đã đề xuất, nhưng tôi đã thử điều đó và nó không hoạt động. Tôi thậm chí còn thêm một dòng trình gỡ rối bên trong nó, để kiểm tra xem nó có đang chạy hay không, nhưng hóa ra mã đó thậm chí không bị trúng :-( – machineghost

0
// To override basic search functionality of datatable 
      $.fn.dataTable.ext.search.push(
        function(settings, data, dataIndex) { 
         var tableId = settings['sTableId']; 
         var searchTerm = settings.oPreviousSearch.sSearch; 
         if ('tableId' == tableId){ 
//I added tableId condition as I have multiple table on same page.. 
          if(data[0].indexOf(searchTerm) > -1 ||data[2].indexOf(searchTerm) > -1||data[3].indexOf(searchTerm) > -1||data[4].indexOf(searchTerm) > -1||data[5].indexOf(searchTerm) > -1 || data[6].indexOf(searchTerm) > -1){ 
           return true; 
          }else{ 
           return false; 
          } 
         } 
         return true; 
        } 
      ); 
+0

để đi cùng với mã của bạn, bạn cũng có thể cung cấp mô tả bằng văn bản –

1

Chỉ cần nâng cấp datatable.js của bạn .. Tôi đã sử dụng 1.9.4 và có cùng một vấn đề sau khi nâng cấp lên 1.10.9 vấn đề được giải quyết ..

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