2009-08-25 5 views
83

título avanzada, simple pregunta:

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

Respuesta

174
$(this).siblings().hide(); 

Traversing/Siblings

+10

jQuery hace que todo sea mucho más elegante. +1! – JorenB

+14

+1. Freakin hermosa. – Lee

+5

¡jQuery es la segunda invención más grande de todos los tiempos después de la computadora! ¡Lo amo! :) –

0

creo que una solución puede ser la siguiente:

$("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(); 
}) 
+0

Quiere decir ': not (#" + ... '. Además, esto no funcionará a menos que el elemento tenga una ID, lo cual es poco probable. – SLaks

+0

También, quiere decir' + ")") ... ' – SLaks

+3

this requeriría que agregue identificadores aleatorios e innecesarios en todas las filas de la mesa (o lo que sea que esté usando). – nickf

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

Como un aparte, creo que te refieres a $("table tr") (con un espacio en lugar de un punto).
La forma en que lo tiene, selecciona cada tabla que tiene una clase de tr (por ejemplo, <table class="tr">), que probablemente no sea la que desea.

Para obtener más información, consulte el documentation.

+0

Sí, fue un error con el punto. De alguna manera no veo cómo es más fácil que la solución de Alexanders, que parece más limpia. Sé que pregunté cómo hacerlo: no, pero el método de los hermanos parece más limpio. – Kordonme

+0

me alegra que te guste :) ¡es más corto también! –

+1

Wo te gusta el encanto. ¡Gracias! – nickb

6

Si desea combinar No() con algunas otras selectores, puede utilizar add():

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

Esto habría Fadeout todos los otros enlaces, pero el hecho clic en uno, y, además, Fadeout algunos identificadores de elegidos y clases