2012-08-06 26 views
5

Tôi phải lọc một bảng html. Để làm như vậy, tôi đã tạo mỗi một cuộc gọi lại cho tất cả các thành phần tr và kiểm tra xem một trong số tr-children có chứa một số mẫu cụ thể không.Kiểm tra xem trẻ em có chứa văn bản cụ thể với jQuery

$("#filter").keypress(function() { 
    var filter = $(this).val(); 

    $("#table1 tr[data-config]").each(function(){ 

     var val = $(this).find(":contains('" + filter + "')"); 

     if(val.length > 0){ 
      $(this).css("display","table-row"); 
     }else{ 
      $(this).css("display","none"); 
     } 
    }); 
}); 

Nó hoạt động, nhưng có chức năng kiểm tra xem phần tử có chứa một số văn bản không?

Hiện tại tôi truy xuất danh sách tất cả các phần tử chứa mẫu và đếm nếu nó lớn hơn 0. Có một chức năng jQuery, mà kiểm tra nếu mô hình này xảy ra và trả về một boolean? Bảng có thể chứa nhiều hàng và do đó tôi muốn chi phí thấp nhất có thể.

+0

Xin chào, NaN, nếu bạn muốn đăng câu trả lời, hãy ping tôi và tôi sẽ xóa tên của tôi (được đánh dấu là wiki cộng đồng). Nếu không, chỉ cần gắn cờ nhận xét này là lỗi thời. Cảm ơn! – brasofilo

Trả lời

4
///// replace these lines... 
// var val = $(this).find(":contains('" + filter + "')"); 
// if(val.length > 0){ 

///// with this line 
if($(this).text().match(filter)){ 

này hoạt động bằng cách chuyển đổi các nội dung toàn bộ hàng vào một chuỗi văn bản, sau đó sử dụng chức năng chuỗi so sánh đơn giản để kiểm tra xem bộ lọc được chứa bên trong các văn bản (và do đó hàng)

0

Khi bộ lọc là trường hợp nhạy cảm, đây là cách làm cho nó không nhạy cảm:

.match("/pattern/i"); 

đạo cụ để Billy!

0

Những câu trả lời là tốt, nhưng có một cách dễ dàng hơn bằng: chứa

Nói chung, làm điều này:

$(".class:contains('texttofind')").css("display", "none"); 

Với ví dụ cụ thể ở trên, làm như sau:

$("#table1 tr[data-config]:contains('" + filter + "')").css("display","table-row"); 

Bạn có thể tìm hiểu thêm tại đây: https://api.jquery.com/contains-selector/

Điều này tránh phải lặp lại với .each hoặc .find.

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