2013-02-15 15 views
8

Próbuję stworzyć coś jak akordeon sieciowy.JQuery next() - Pierwsze następne rodzeństwo używając tylko klas

wizualna przykład:

[TITLE DIV 1] 
[CONTENT DIV 1] 
[TITLE DIV 2] 
[CONTENT DIV 2] 
[TITLE DIV 3] 
[CONTENT DIV 3] 

Chcę, aby móc przełączać (funkcja przełączania jQuery()) jest "Content Div" poprzez kliknięcie na odpowiedni tytuł "div".

Próbowałem następujące, ale to nie działa.

http://jsfiddle.net/Cs3YY/

HTML:

<div class="topSeparator"></div> 
<div class="titleDiv"> 
    <h1>Title 1</h1> 
</div> 
<div class="bottomSeparator"></div>     
<div class="contentDiv"><h2>Content 1</h2></div> 

<div class="topSeparator"></div> 
<div class="titleDiv"> 
    <h1>Title 2</h1> 
</div> 
<div class="bottomSeparator"></div>     
<div class="contentDiv"><h2>Content 2</h2></div> 

JQUERY:

$('.titleDiv').click(function() {  
     $(this).next('.contentDiv').toggle(); 
}); 

http://jsfiddle.net/Cs3YY/

Chciałbym opisać mój proces funkcji, takich jak:

  1. Po kliknięciu na elemencie z klasy o nazwie "titleDiv" zrobić:

1.1. Wybierz ten kliknięty element;

1.1.1. Wybierz następne rodzeństwo tego klikniętego elementu za pomocą klasy o nazwie "contentDiv";

1.1.1.1. Ustaw funkcję toggle() na tym ostatnim elemencie (z klasą o nazwie "contentDiv");

Wygląda na to, że się mylę lub czegoś brakuje.

.

Załączam jquery 1.8.3 (poprawnie).

Działa to, gdy zamiast klas używasz identyfikatorów (staram się ich unikać).

Umieściłem alert wewnątrz funkcji kliknięcia i działa (problem występuje w środku).

Odpowiedz

25

Zastosowanie .nextAll() i :first dostać następny contentDiv

$(this).nextAll('.contentDiv:first').toggle(); 

Demo tutaj http://jsfiddle.net/Cs3YY/1/

+1

Dzięki Anton. Nadal nie rozumiem różnicy między następnym (". ContentDiv") i nextAll (". ContentDiv"), nie powinny dostać się do elementu? (NastępnaWszystko dostanie wszystko) – Edu

+0

następnie pobiera element bezpośrednio po którym w tym przypadku jest bottomSeparator.Użycie nextAll pobiera wszystkie elementy po, ale używając: first pobiera pierwszy element z selektorem (". ContentDiv") – Anton

+0

Nie powinien następować dalej (". ContentDiv") wybrać pierwszy następny element, który jest równy do podanego argumentu (Class contentDiv)? – Edu

-1

Mimo, że to dlatego, next() wybrać bottomSeparator. Można użyć tej sztuczki

$('.titleDiv').click(function() {  

    $(this).next().next().toggle(); 
});  

http://jsfiddle.net/Cs3YY/12/

+0

Myślę, że jest to trudniejsze do utrzymania niż inne rozwiązania, ze względu na "magiczną" podwójność –

+0

Jeśli z jakiegoś powodu zmienię strukturę HTML (usunięcie separatora div lub dodanie czegoś przed/za tym separatorem), to przestałoby działać . – Edu

+1

Tak, to tylko sztuczka i niezbyt wygórowana, ale myślałem, że to pokaże, co było nie tak. – luxcem

Powiązane problemy