2011-02-11 47 views
6

Tôi muốn chọn các phần tử, nhưng không phải nếu một trong các tổ tiên của chúng phù hợp với một bộ chọn nhất định.Làm thế nào để bỏ qua một bối cảnh

Ví dụ: giả sử tôi muốn khớp tất cả các nút <a> không phải là hậu duệ của bảng.

tôi đã cố gắng một cái gì đó như thế này:

$("a", ":not(table *)"); 

nhưng mà bị treo trình duyệt của tôi.

Cái này cũng bị treo trình duyệt của tôi:

jQuery("a", ":not(table td)"); 

Trang truy vấn là khá lớn, với rất nhiều bảng rất lớn. Vì vậy, tôi cần một cái gì đó cũng hoạt động tốt. Bất kỳ ý tưởng?

Trả lời

6

Các câu trả lời khác là những thứ quá phức tạp.

$('a').not('table a'); 

-hoặc-

$('a:not(table a)'); 

Tham số thứ hai trong jQuery chức năng là bối cảnh, theo đó để tìm kiếm một phần tử, nhưng việc lựa chọn :not(table) sẽ chọn mỗi yếu tố đó không phải là một bảng, bao gồm hậu duệ của các bảng. Thông thường, bạn muốn sử dụng tham số ngữ cảnh khi bạn có tài liệu hoặc phần tử cụ thể mà bạn muốn tìm kiếm.

+0

Cảm ơn! Thật thú vị, hiệu suất là tồi tệ hơn khi không quét các bảng, tôi đoán bởi vì: không chọn mất một thời gian là tốt. – Aaron

0
$('a').not(function() { 
    return $(this).closest('table').length > 0; 
}); 

hoặc có khả năng sẽ nhanh hơn nếu họ luôn là con trực tiếp của một thẻ <td>

$('a').not(function() { 
    return $(this).parent('td').length > 0; 
}); 
Các vấn đề liên quan