Ẩn tất cả trừ $ (this) via: not in jQuery selector


97

Tiêu đề nâng cao, câu hỏi đơn giản:

Làm cách nào để thực hiện những điều sau trong jQuery (ẩn mọi thứ ngoại trừ $(this))?

$("table tr").click(function() {
    $("table tr:not(" + $(this) + ")").hide();
    // $(this) is only to illustrate my problem

    $("table tr").show();
});

Câu trả lời:



157
$("table.tr").not(this).hide();

Ngoài ra, tôi nghĩ ý bạn là $("table tr")(với dấu cách thay vì dấu chấm).
Theo cách bạn có, nó chọn mọi bảng có lớp tr(ví dụ <table class="tr">:), có thể không phải là thứ bạn muốn.

Để biết thêm thông tin, hãy xem tài liệu .


Vâng, đó là một lỗi với dấu chấm. Bằng cách nào đó tôi không thấy cách này dễ dàng hơn so với giải pháp Alexanders, có vẻ sạch sẽ hơn. Tôi biết tôi đã hỏi làm thế nào để làm điều đó với: not, nhưng phương pháp anh chị em chỉ có vẻ sạch sẽ hơn.
Kordonme

3
Chỉ cần thêm, nếu bạn đang bấm một cái gì đó bên trong bảng để thử và nhận được nó để ẩn tất cả các hàng bảng trừ hàng chứa mặt hàng bạn nhấp, sử dụng:$('tr').not($(this).closest('tr')).hide();
Jimbo

3
Điều này rất hữu ích cho việc chọn các phần tử cụ thể, trong trường hợp cấu trúc phức tạp hơn mức cho phép của anh chị em. Tôi đang gặp khó khăn trong việc tìm ra một ví dụ, nhưng có lẽ một cái gì đó mà bạn muốn ẩn mọi thứ bên trong một lưới, nhưng không phải chính lưới.
goodeye

6

Nếu bạn muốn kết hợp not () với một số bộ chọn khác, bạn có thể sử dụng add ():

$('a').click(function(e){
  $('a').not(this).add('#someID, .someClass, #someOtherID').animate({'opacity':0}, 800);
});

Điều này sẽ làm mờ tất cả các liên kết khác, nhưng liên kết được nhấp và cũng làm mờ một số id và lớp đã chọn.


0

Tôi nghĩ một giải pháp có thể là:

$("table.tr").click(function() {
    $("table.tr:not(" + $(this).attr("id") + "").hide(); // $(this) is only to illustrate my problem
    $(this).show();
})

--EDIT cho nhận xét:

$("table.tr").click(function() {
    $("table.tr:not(#" + $(this).attr("id") + ")").hide(); // $(this) is only to illustrate my problem
    $(this).show();
})

Ý bạn là :not(#" + .... Ngoài ra, điều này sẽ không hoạt động trừ khi phần tử có ID, điều này khó xảy ra.
SLaks

3
điều này sẽ yêu cầu bạn thêm các id ngẫu nhiên và không cần thiết vào tất cả các hàng trong bảng của bạn (hoặc bất cứ thứ gì bạn đang sử dụng).
nickf

@ SLaks, Cảm ơn bạn đã chỉnh sửa. Về cơ bản, bạn có thể lưu ý rằng đôi khi những gì chúng tôi tìm kiếm là có một Câu trả lời nhanh để trợ giúp. Tại sao không xem nhẹ những gì chúng tôi đặt.
descalzo andres

@nickf, Đúng, bạn nói đúng, nhưng nhận xét đó sẽ tốt trước tiên nếu hỏi @Kordonme xem họ có ID cho mỗi TR.
andres descalzo 25/08/09
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.