2012-04-22 13 views
14

Conmutación un elemento y sus hermanos pueden llevarse a cabo como:Seleccione un elemento y sus hermanos

$(this).toggle(); 
$(this).prev().toggle(); 

integración de estas plantas no funciona:

$(this,$(this).prev()).toggle(); 

¿Cómo puede tanto seleccionarse a la vez ?

Respuesta

6

Por cierto, mientras que esta cuestión ya ha sido answered by drinchev , Pensé en pegar este experimento rápido que acabo de hacer, después de leer la pregunta, que también funciona. Aunque ... me sorprendió cuando lo hizo:

$('#recipient').click(
    function(){ 
     var pair = [this, this.previousElementSibling]; 
     $(pair).toggleClass('red green'); 
    });​ 

JS Fiddle demo.

Por cierto, un JS Perf loose comparison of the two selector approaches.


Editado para añadir un IE-(por lo que yo sé) -Friendly actualización, aunque actualmente estoy ensillar todos los navegadores con él, en lugar de función de detección (también, por fin se dio cuenta de que el azul ! = verde):

function pESibling(n){ 
    var nPS = n.previousSibling; 
    if (!n || nPS === null){ 
     return false; 
    } 
    else if (nPS.nodeType == 1){ 
     return nPS; 
    } 
    else { 
     return pESibling(nPS); 
    } 
} 

var that = document.getElementById('recipient'), 
    pair = [that, pESibling(that)]; 
$(pair).toggleClass('red green'); 
console.log(pair); 
​ 

JS Fiddle demo

+0

¡Las alegrías de la web! No en serio..! =) Para abreviar una larga historia [IE <9 no 'hace' 'previousElementSibling'] (http://www.quirksmode.org/dom/w3c_core.html#t84). Aún así, está el antiguo, y siempre a la moda, enfoque 'si'. =) –

+0

Estaba cometiendo un estúpido error al probar su solución. Mientras, no, 'previousElementSibling' no hará el truco, simplemente usando una matriz ...' $ ([$ (this), $ (this.prev())]) 'lo hace! – Gary

+2

Hay una forma más fácil $ (this) .prev(). Y Self(). Toggle(); –

30

para jQuery 1.8+, utilice .addBack():

$(this).prev().addBack().toggle(); 

Para versiones anteriores de jQuery, utilice el desuso .andSelf() llamada (consulte demo):

$(this).prev().andSelf().toggle(); 
+0

La demostración * * está mal. La respuesta es usar 'prev()' mientras la demostración usa 'parent()', que no es lo que el OP quería. – Pang

6

para los hermanos y prev auto:

$(this).prev().andSelf().toggle(); 

para todos los hermanos y auto:

$(this).parent().children().toggle(); 
1

también funciona:

$(this).prev().add($(this)).toggle() 
Cuestiones relacionadas