2012-11-19 59 views
-2

你好,我接下來有一些問題。對於開始我有看起來像這樣的標記:jQuery下一個返回-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> 

在jquery中我收集所有的'ul'元素保存在變量例如。 contElems。在這個變量中,我找到了與活動類相關的li,然後我嘗試獲取下一個元素。代碼如下所示:

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

它工作時積極李未在UL持續,但是當它是最後一個在UL的next()返回-1。我的代碼有什麼問題?我怎樣才能使它工作?:)

+0

那是當然究竟它是如何工作 – mplungjan

+0

'的.next()'僅查看所選元素的同胞,而不是您從中導出所選元素的集合。你需要測試它的長度是0,在這種情況下,移動到下一個ul。 –

+1

「獲取匹配元素集中每個元素的緊隨其後的同胞,如果提供了選擇器,則只有匹配該選擇器時纔會檢索下一個兄弟。 – mplungjan

回答

0

因爲li.active後沒有下一個元素。如果您只是試圖訪問li.active,然後使用contElems.find('li.active')

你期待什麼行爲?

0

如果這是最後一個,那麼沒有next()之一,所以你會得到一個虛假價值。就個人而言,如果我寫next(),我會返回null,但顯然它決定返回值-1意味着沒有下一個元素。

+2

-1從哪裏來? '。next()'返回一個包含元素或不包含元素的jQuery對象。無論如何,它是一個類似數組的對象,而不是-1 ... –

0

jQuery documentation

說明:獲取緊隨其後的各元素的同級集合中匹配的元素。如果提供了一個選擇器,只有當它與該選擇器匹配時纔會檢索下一個兄弟。

最後一個元素沒有「緊接着的兄弟姐妹」。

您可以嘗試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(); 

你要確保這樣,你得到1個兄弟即使匹配ul是最後一個......

0

.next()找到下一個兄弟姐妹(同一父母)。如果你想找到下一個ulli(這是一個表弟,而不是一個兄弟姐妹),你可以做這樣的:

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!"); 
}