Ocultar todo menos $ (esto) a través de: no en el selector de jQuery

97

Título avanzado, pregunta simple:

¿Cómo puedo hacer lo siguiente en jQuery (ocultar todo excepto $(this))?

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

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

Respuestas:

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

Aparte, creo que te refieres a $("table tr")(con un espacio en lugar de un punto).
De la forma en que lo tiene, selecciona todas las tablas que tienen una clase de tr(por ejemplo, <table class="tr">), que probablemente no sea lo que desea.

Para obtener más información, consulte la documentación .

SLaks
fuente
Sí, fue un error con el punto. De alguna manera no veo cómo esto es más fácil que la solución de Alexanders, que parece más limpia. Sé que pregunté cómo hacerlo con: no, pero el método de los hermanos parece más limpio.
Kordonme
3
Solo para agregar, si está haciendo clic en algo dentro de la tabla para intentar que oculte todas las filas de la tabla EXCLUYENDO la fila que contiene el elemento en el que hizo clic, use:$('tr').not($(this).closest('tr')).hide();
Jimbo
3
Esto es útil para seleccionar elementos específicos, en caso de que la estructura sea más compleja de lo que permitirían los hermanos. Me está costando encontrar un ejemplo, pero tal vez algo en lo que quieras ocultar cosas dentro de una cuadrícula, pero no la cuadrícula en sí.
goodeye
6

Si desea combinar not () con otros selectores, puede usar add ():

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

Esto desvanecería todos los demás enlaces, excepto el clic en el que se hizo clic, y además desvanecería algunos identificadores y clases elegidos.

lenooh
fuente
0

Creo que una solución puede ser esta:

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

--EDIT para comentario:

$("table.tr").click(function() {
    $("table.tr:not(#" + $(this).attr("id") + ")").hide(); // $(this) is only to illustrate my problem
    $(this).show();
})
andres descalzo
fuente
Te refieres :not(#" + .... Además, esto no funcionará a menos que el elemento tenga una identificación, lo cual es poco probable.
SLaks
3
esto requeriría que agregue identificadores aleatorios e innecesarios en todas las filas de su tabla (o lo que sea que esté usando).
nickf
@ SLaks, Gracias por la corrección. En el dow, es posible que tenga en cuenta que a veces lo que buscamos es tener Respuestas Rápidas para ayudar. Por qué no tomar a la ligera lo que ponemos.
andres descalzo
@nickf, Sí, tienes razón, pero ese comentario sería bueno primero preguntarle a @Kordonme si tienen una identificación para cada TR.
andres descalzo