2012-04-22 5 views
14

ein Element und seine Geschwister Makeln kann erreicht werden: sie funktioniert nichtWählen Sie ein Element und seine Geschwister

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

Kombination:

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

Wie beide zur gleichen Zeit ausgewählt werden kann ?

Antwort

6

Während übrigens diese Frage bereits answered by drinchev gewesen Ich dachte, ich würde dieses schnelle Experiment einfügen, nachdem ich die Frage gelesen habe, was auch funktioniert. Wenn auch nur ... es mich überrascht, wenn es tat:

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

JS Fiddle demo.

Übrigens, eine JS Perf loose comparison of the two selector approaches.


Herausgegeben ein IE- (soweit ich weiß) -friendly Update hinzufügen, wenn auch ich zur Zeit alle Browser damit Satteln, anstatt Feature-Erkennung (auch ich schließlich erkennen, dass blau ! = grün):

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

Die Freuden des Internets! Nein im Ernst..! =) Um eine lange Geschichte kurz zu machen [IE <9 "nicht" "previousElementSibling"] (http://www.quirksmode.org/dom/w3c_core.html#t84). Dennoch gibt es den alten und immer modischen "wenn" -Ansatz. =) –

+0

Ich habe beim Testen Ihrer Lösung einen dummen Fehler gemacht. Während, nein, 'previousElementSibling' wird nicht den Trick machen, einfach mit einem Array wird ... '$ ([$ (this), $ (this.prev())])" tut es! – Gary

+2

Es gibt einen einfacheren Weg $ (this) .prev(). AndSelf(). Toggle(); –

30

Für jQuery 1.8+ verwenden .addBack():

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

Für frühere jQuery Versionen verwenden den veralteten .andSelf() Aufruf (siehe demo):

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

Die * Demo * falsch ist. Die Antwort verwendet 'prev()', während das Demo 'parent() 'verwendet, was nicht das ist, was das OP wollte. – Pang

6

für i.Vj. Geschwister und mich selbst:

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

für alle Geschwister und mich selbst:

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

auch funktioniert:

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