2012-11-19 4 views
-2

안녕하세요 저는 jQuery에 몇 가지 문제가 있습니다. 시작 부분을 위해 나는 마크 업 다음과 같이보고했다 : JQuery와에jQuery next returns -1

<ul> 
    <li>...</li> 
    <li>...</li> 
    <li>...</li> 
    <li>...</li> 
    <li class="active">...</li> 
</ul> 
<ul> 
    <li>...</li> 
    <li>...</li> 
    <li>...</li> 
    <li>...</li> 
    <li>...</li> 
</ul> 
<ul> 
    <li>...</li> 
    <li>...</li> 
    <li>...</li> 
    <li>...</li> 
    <li>...</li> 
</ul> 

내가 모든 'UL'요소의 컬렉션이 변수 예를 누르십시오. contElems. 이 변수에서 나는 클래스가 활성화 된 상태에서 li을 찾고 다음 elem을 얻으려고합니다. 코드는 다음과 같습니다

contElems.find('li.active').next(); 

그것은 활성 리는 UL에서 지속되지 않을 때 작동하지만이 UL에 다음 마지막 때() -1을 돌려줍니다. 내 코드에 어떤 문제가 있습니까? 그리고 어떻게 작동시킬 수 있습니까? :)

+0

그것이 – mplungjan

+0

'다음 내용을 작동 정확히 어떻게()' 선택한 요소를 파생시킨 모음이 아니라 선택한 요소의 형제를 찾습니다. 길이가 0인지 테스트해야하며,이 경우 다음 ul로 이동하십시오. –

+1

"일치하는 요소 집합에서 각 요소의 바로 다음 형제를 가져옵니다. 선택기가 제공되면 선택기와 일치하는 경우에만 다음 형제를 검색합니다." – mplungjan

답변

0

li.active 뒤에 다음 요소가 없기 때문에. li.active에 액세스하려는 경우 contElems.find('li.active')을 사용하십시오.

예상되는 동작은 무엇입니까?

0

마지막 문장 인 경우 next()이 없으므로 잘못된 값을 얻게됩니다. 개인적으로, 내가 을 작성했다면, 나는 null을 돌려 줄 것이지만, 분명히 반환 값 -1은 다음 요소가 없다는 것을 의미합니다. jQuery documentation에서

+2

-1은 어디에서 왔습니까? '.next()'는 요소를 포함하거나 요소를 포함하지 않는 jQuery 객체를 반환합니다. 어느 쪽이든, 그것은 -1과 같은 배열 형 객체입니다 ... –

0

:

설명 : 일치하는 요소의 집합에있는 각 요소의 바로 다음 형제를 가져옵니다. 선택기가 제공되면 해당 선택기와 일치하는 경우에만 다음 형제를 검색합니다.

마지막 요소의 "바로 다음 형제"가 없습니다.

당신은 this을 시도 할 수 있습니다 : 당신이 할 수있는 것은

function getNext(contElems) { 
    var next = contElems.find('li.active').next(); 
    if (next != undefined && next != null && next != -1 && next.length > 0) 
     return next; 

    var list = contElems.find('li'), 
     eq = list.index(contElems.find('li.active')); 

    next = list.eq(eq + 1);  return next; 
} 
1

: 당신이 있는지 확인

contElems.find('li.active').siblings().first(); 

그런 식으로 당신은 일치 ul가 마지막 1 형제하더라도 얻을 ...

0

.next()은 다음 형제 (같은 부모)를 찾습니다. 당신이 (형제보다는 사촌이다) 다음 ul에서 li를 찾으려면, 당신은 이런 식으로 작업을 수행 할 수 있습니다 물론이다

var el = contElems.find('li.active').next(); 
if (el.length == 0) { 
    el = contElems.find('li.active').closest('ul').next().find('li:first'); 
} 
if (el.length == 0) { 
    alert("Last li is active!"); 
}