2010-07-20 2 views
4

다른 주제가 있지만 그 중 어떤 것도 작동하지 못했기 때문에 다시 질문 할 것입니다. 예를 들어 리튬 태그의 일부가 숨겨져 있습니다, 일부는 .show 사용하여 볼 수 있습니다()와 .hide jQuery를 사용jquery next()와 반드시 서로 인접하지 않은 요소

<ul> 
    <li>Item one</li> 
    <li>Item two</li> 
    <li>Item three</li> 
    <li>Item four</li> 
    <li>Item five</li> 
</ul> 

() :

나는이처럼 보이는 HTML 목록이

<ul> 
    <li style="display: block">Item one</li> 
    <li style="display: none">Item two</li> 
    <li style="display: none">Item three</li> 
    <li style="display: block">Item four</li> 
    <li style="display: block">Item five</li> 
</ul> 

I했습니다 코드는 다음과 같습니다 있도록도 (코드는 오직 가시적 인 리튬에이 클래스를 추가합니다) 리 태그 중 하나에 클래스를 추가 jQuery를 다른 비트를 이동합니다

<ul> 
    <li style="display: block" class="highlight">Item one</li> 
    <li style="display: none">Item two</li> 
    <li style="display: none">Item three</li> 
    <li style="display: block">Item four</li> 
    <li style="display: block">Item five</li> 
</ul> 

내가해야할 일은 이벤트가 발생했을 때 (이 경우 사용자가 아래로 키를 친다)입니다. 클래스의 li을 클래스를 제거하고 클래스를 다음 보이는 li에 추가하길 원합니다. 나는 이것을 할 것이라고 생각했을 것이다.

그러나 이는 다음에 보이는 리튬이 다음 어쨌든 다음 경우에만 작동한다. 모든 경우에 올바른 요소를 선택하려면 어떻게해야합니까?

답변

10

봅니다 :

$('li.highlight') 
    .removeClass('highlight') 
    .nextAll(':visible:first') 
    .addClass('highlight'); 

성가 시게하고, 혼동, 다음 단지 바로 다음 형제를 선택합니다. 선택기를 전달하여 필터링 할 수 있다는 사실은 뭔가를 찾을 때까지 계속 될 것이라고 생각하게 만듭니다. 필터 식은 next이 전달 된 선택기와 일치하는 경우에만 매우 다음 요소를 가져옵니다.

http://api.jquery.com/nextAll/

+0

감사를 참조하십시오 - 아주 간단한 (그리고 약간의 말도이 당신이 저를 요구하는 경우에 그것을 할 수있는 방법이 있음)을하지만, 와우 – chrism

+0

덕분에, 그래서 작동하는 것 같다. 이 대답은 완전히 도움이되었습니다. 나는 같은 문제가 있었다. 투표 만했지만 감사의 말을 너무했습니다! – donlaur