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

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


Да, это была ошибка с точкой. Я почему-то не понимаю, насколько это проще, чем решение 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);
});

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


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.
андрес дескальцо,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.