Сховати всі, крім $ (це) через: не в селекторі jQuery


97

Розширений заголовок, просте запитання:

Як я можу зробити наступне в jQuery (приховуючи все, крім $(this))?

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

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

Відповіді:



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

Як сторону, я думаю, ви маєте на увазі $("table tr")(з пробілом замість крапки).
Як ви це маєте, він вибирає кожну таблицю з класом tr(наприклад,<table class="tr"> ), який, мабуть, не є тим, що ви хочете.

Для отримання додаткової інформації дивіться документацію .


Так, це була помилка з крапкою. Я якось не бачу, як це простіше, ніж рішення Олександра, яке здається більш чистим. Я знаю, що я запитав, як це зробити: ні, але метод побратимів просто здається більш чистим.
Кордонме

3
Просто додайте, якщо ви клацаєте щось у таблиці, щоб спробувати його приховати, щоб приховати всі рядки таблиці, Включаючи рядок, що містить елемент, який ви натиснули, використовуйте:$('tr').not($(this).closest('tr')).hide();
Jimbo

3
Це корисно для вибору конкретних елементів, якщо структура є більш складною, ніж це дозволило б. Мені важко придумати приклад, але, можливо, щось там, де ви хочете приховати речі всередині сітки, але не саму сітку.
goodeye

6

Якщо ви хочете поєднати не () з деякими іншими селекторами, ви можете використовувати add ():

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

Це призведе до вимикання всіх інших посилань, окрім натиснутого, та ще й вимкнення деяких обраних ідентифікаторів та класів.


0

Я думаю, що рішенням може бути таке:

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

--EDIT для коментаря:

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

Ви маєте на увазі :not(#" + .... Крім того, це не буде працювати, якщо елемент не має ідентифікатора, що малоймовірно.
SLaks

3
для цього потрібно буде додати випадкові та непотрібні ідентифікатори на всі рядки таблиці (або все, що ви використовуєте).
nickf

@ SLaks, дякую за виправлення Вниз, ви можете мати на увазі, що іноді ми шукаємо швидких відповідей. Чому б не взяти злегка те, що ми поставили.
andres descalzo

@nickf, Так, ви маєте рацію, але цей коментар було б добре спершу запитати у @Kordonme, якщо вони мають ідентифікатор для кожного TR.
andres descalzo
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.