2012-05-10 56 views
0

我想要當前'a'的下一個'a'元素。當電流爲2,3,4時,我用$('a.current')。nextAll('a')捕獲3,4,5,但當電流爲5時,我無法捕獲下一個'a'。 如果某人有解決方案......如何用祖先獲得下一個JQuery

<div id="slides"> 
    <ul> 
    <li> 
     <a href="" class='current'>2</a> 
     <a href="" >3</a> 
     <a href="" >4</a> 
     <a href="" >5</a> 
    </li> 
     <li> 
     <a href="" >6</a> 
     <a href="" >7</a> 
     <a href="" >8</a> 
     <a href="" >9</a> 
    </li> 
    </ul> 
</div> 
+0

您正在使用'.nextAll',所以您想要''current''之後的所有'a'元素,對吧? –

+0

是的,我只是想第一個 – zedouard

+0

感謝所有這個答覆,我不知道哪個是計算最好的 – zedouard

回答

1
var curr = $('a.current'),   // get the current 
    a = curr.closest('ul').find('a'), // get all the "a" elements 
    idx = a.index(curr),    // get the index of the current among all 
    nextall = a.slice(idx + 1);  // slice those greater than the current 

現場演示:http://jsfiddle.net/eaXdc/


如果你只是想下單,改變這種:

a.slice(idx + 1); 

to t他:另外,您目前使用nextAll,這將返回所有以下a元素,當它聽起來像你只想先上後下a

var $curr = $('a.current'), 
    $next = $curr.next('a'); 

$next.length || ($next = $curr.parent().next().find('a:first')); 

a.eq(idx + 1); 
+0

非常感謝... – zedouard

+0

@zedouard:不客氣。 –

0

因爲.nextAll()只返回匹配的元素

6,7,8,9的兄弟姐妹都沒有的5兄弟姐妹,因爲它們是在不同的parent(li)

你你需要那些你必須使用遍歷DOM jQuery來獲取這些a元素。

1
var next = $(this).index() < $(this).parent().children('a').length-1 ? 
      $(this).next() : 
      $(this).parent().next('li').children('a:first'); 

FIDDLE

+0

很聰明;我喜歡 – veeTrain

0

如果你能知道你是在年底(無結果),那麼你就應該能夠跳出進入下一li和抓住所有的後續錨元素。

Here's how I approached it。我給了第五個錨元素一個id來表明它是我的current。當您的current目標沒有.nextAll()子項(.size()爲0)時,您可以執行以下操作以查找隨後的錨點元素。

$("#5").parent().next("li").find("a").css("color","grey");​ 

顏色的變化是爲了幫助指示找到了哪些元素。看起來你有很多選擇可供選擇!

更新:如果你只是想要第一個,你可以用:first這個update來指定。

$("#5").parent().next("li").find("a:first")