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
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. =) –
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
Es gibt einen einfacheren Weg $ (this) .prev(). AndSelf(). Toggle(); –