2012-04-22 22 views
14

przełączając element i jego rodzeństwo może być realizowane jako:Wybierz element i jego rodzeństwo

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

Łącząc je nie działa:

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

Jak może zarówno być wybrany w tym samym czasie ?

Odpowiedz

6

Nawiasem mówiąc, podczas gdy kwestia ta została już answered by drinchev , Myślałem, że wkleiłem ten szybki eksperyment, który właśnie zrobiłem, po przeczytaniu pytania, które również działa. Chociaż ... to mnie zaskoczyło, kiedy to miało miejsce:

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

JS Fiddle demo.

Nawiasem mówiąc, JS Perf loose comparison of the two selector approaches.


Zmieniano dodać IE- (o ile wiem)-friendly aktualizację, aczkolwiek jestem obecnie siodłaniem wszystkie przeglądarki z nim, a nie funkcje wykrywania (również, ale w końcu zrozumiał, że niebieski ! = zielony):

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

Radości z sieci! Niepoważnie..! =) Aby skrócić długą historię [IE <9 nie "wykonaj" "previousElementSibling"] (http://www.quirksmode.org/dom/w3c_core.html#t84). Jest jednak stare i zawsze modne podejście "jeśli". =) –

+0

Robiłem głupi błąd podczas testowania twojego rozwiązania. Podczas, gdy nie, 'previousElementSibling' nie załatwi sprawy, po prostu używając tablicy będzie ...' $ ([$ (this), $ (this.prev())]) 'robi to! – Gary

+2

Istnieje łatwiejszy sposób $ (this) .prev(). AndSelf(). Toggle(); –

30

dla jQuery 1.8+, użyj .addBack():

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

Dla wcześniejszych wersji jQuery, użyj przestarzałej .andSelf() połączenia (patrz demo):

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

Gwiazdka * demo * jest źle. Odpowiedzią jest użycie 'prev()' podczas gdy wersja demo używa 'parent()', co nie jest tym, czego chciał OP. – Pang

6

dla rodzeństwa prev i samodzielne:

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

dla wszystkich rodzeństwa i siebie:

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

działa również:

$(this).prev().add($(this)).toggle() 
Powiązane problemy