Скрыть все, кроме $ (this) через: не в селекторе 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"> ), что, вероятно, не то, что вам нужно.

Для получения дополнительной информации см. Документацию .

SLaks
источник
Да, это была ошибка с точкой. Я почему-то не понимаю, насколько это проще, чем решение Alexanders, которое кажется более чистым. Я знаю, что спросил, как это сделать с помощью: not, но метод siblings кажется более чистым.
Кордонме
3
Просто чтобы добавить, если вы щелкаете что-то в таблице, чтобы попытаться заставить его скрыть все строки таблицы, ЗА ИСКЛЮЧЕНИЕМ строки, содержащей элемент, который вы щелкнули, используйте:$('tr').not($(this).closest('tr')).hide();
Jimbo
3
Это полезно для выбора конкретных элементов, если структура более сложная, чем позволяют братья и сестры. Мне сложно придумать пример, но, возможно, что-то, где вы хотите скрыть вещи внутри сетки, но не саму сетку.
goodeye
6

Если вы хотите объединить not () с некоторыми другими селекторами, вы можете использовать add ():

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

Это приведет к исчезновению всех других ссылок, кроме той, по которой щелкнули, и, кроме того, исчезнет некоторые выбранные идентификаторы и классы.

Lenooh
источник
0

Думаю, решение может быть таким:

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

- РЕДАКТИРОВАТЬ для комментария:

$("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, Спасибо за исправление. Вы можете иметь в виду, что иногда мы стремимся получить быстрые ответы, чтобы помочь. Почему бы не относиться легкомысленно к тому, что мы ставим
андрес дескальцо,
@nickf, Да, вы правы, но этот комментарий был бы хорош сначала спросить @Kordonme, есть ли у них ID для каждого TR.
андрес дескальцо,