2013-02-15 7 views
8

웹 아코디언과 같은 것을 만들려고합니다.JQuery next() - 클래스 만 사용하여 다음 형제 가져 오기

시각 예 :

내가 전환 할 수 있도록하려는
[TITLE DIV 1] 
[CONTENT DIV 1] 
[TITLE DIV 2] 
[CONTENT DIV 2] 
[TITLE DIV 3] 
[CONTENT DIV 3] 

(JQuery와 기능 토글()) 각각의 "제목 사업부"를 클릭하여 "콘텐츠 사업부".

다음을 시도했지만 작동하지 않습니다.

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/

:

,369
  1. 는 "titleDiv"라는 이름의 클래스를 가진 요소를 클릭 1,363,210은 수행

1.1. 클릭 된 요소를 선택하십시오.

1.1. "contentDiv"라는 클래스로 클릭 된 요소의 다음 형제를 선택하십시오.

1.1.1. 이 마지막 요소 ("contentDiv"라는 클래스로)에 대해 toggle() 함수를 실행합니다.

내가 틀렸거나 뭔가를 놓친 것 같습니다.

.

저는 jquery 1.8.3 (올바르게)을 포함하고 있습니다.

이것은 클래스 대신 ID를 사용할 때 작동합니다 (사용하지 않으려 고합니다).

클릭 기능 내부에 경고가 표시되고 작동합니다 (문제가 내부에 있음).

답변

25

사용 .nextAll():first 다음()는 bottomSeparator를 선택 그것 때문에 여기 http://jsfiddle.net/Cs3YY/1/

+1

감사 안톤를 사용할 수 있습니다. 나는 여전히 next ('. contentDiv')와 nextAll ('. contentDiv')의 차이점을 이해하지 못하고 둘 다 요소에 도달해서는 안됩니까? (nextAll은 모두를 얻습니다) – Edu

+0

다음에 직접 bottomSeparator 인 요소를 가져옵니다.nextAll을 사용하면 모든 요소를 ​​가져 오지만 사용하면 먼저 selector (".contentDiv")를 사용하여 첫 번째 요소를 가져옵니다. – Anton

+0

다음 ('.contentDiv')은 제공된 인수를 동일하게하는 첫 번째 다음 요소를 선택하면 안됩니다 (Class contentDiv)? – Edu

-1

하지만 다음 contentDiv이

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

데모 얻을 수 있습니다. 당신은 그 트릭

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

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

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

+0

나는 이것이 '마술'이중 넥팅으로 인해 다른 솔루션보다 유지하기가 더 어렵다고 생각한다 –

+0

어떤 이유로 (분리 기호 div를 제거하거나 그 분리 기호 앞/뒤에 뭔가를 추가하는) HTML 구조를 변경하면 작동을 멈춘다. . – Edu

+1

네, 그저 속임수가 아니며 아주 쓸데없는 것 같지만, 그게 틀린 것을 보여줄 것이라고 생각했습니다. – luxcem