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();
});

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 .


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.


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();
})

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.