2013-12-11 48 views
3

因此,我在頁面上有幾張幻燈片,每個幻燈片都有一個菜單項。 如果menuitem#1被點擊,我想去幻燈片#1等等。 到目前爲止沒有問題,但我不想爲每個項目進行硬編碼。計算哪個子元素是一個元素

有沒有辦法計算哪個#子元素被點擊? (最好的jQuery)

<nav id="mainNav"> 
    <ul> 
     <li> 
      <a href="#">Hello</a> 
     </li> 
     <li> 
      <a href="#">World</a> 
     </li> 
     <li> 
      <a href="#">Blaa</a> 
     </li> 
    </ul> 
</nav> 
+1

如何你的處理程序是什麼樣的? – PSL

+0

看看'index()'方法http://api.jquery.com/index/ –

+0

看起來像索引()正是我正在尋找的。謝謝! – schliflo

回答

5

由於您使用jQuery,您可以使用index方法:

$('#mainNav a').click(function() { 
    alert($(this).parent().index()); 
    return false; 
}); 

或者如果<a>可以任意嵌套,你可能會使用這樣的:

$('#mainNav a').click(function() { 
    alert($(this).closest('#mainNav > ul > li').index()); 
    return false; 
}); 

demonstration

+0

index()與parent()的結合正是解決了這個問題。謝了哥們! – schliflo

+0

@MichaelMikowski這是一個很好的建議。我已經將其納入我的答案。 –

1

這將使喲我們的代碼完全動態。

<nav id="mainNav"> 
     <ul> 
      <li> 
       <a href="#" class="nav">Hello</a> 
      </li> 
      <li> 
       <a href="#" class="nav">World</a> 
      </li> 
      <li> 
       <a href="#" class="nav">Blaa</a> 
      </li> 
     </ul> 
    </nav> 


    <script> 
     $(document).ready(function(){ 
     var navs = $('.nav'); 
     $.each(navs,function(index,value){ 
      $(navs[i]).attr('data-index',i); 
      } 
     $('.nav').click(function(){ 
      var nav_index = $(this).attr('data-index'); 
      //Do something with nav_index here 
     }); 
}); 
</script> 
4

既然你還標記了普通的舊,我給你一個解決方案...

你可以利用previousElementSibling像這樣(fiddle):

function getElementIndex(elem) { 
    var i = 0; 
    while (elem = elem.previousElementSibling) i++; 
    return i; 
} 
+1

超棒的伴侶;) – schliflo

相關問題