获取所单击列表项的位置

时间:2013-06-11 11:18:21

标签: javascript jquery events indexing

假设我们有这个标记:

<header>
   <nav>
      <ul>
         <li><a href="">first (not)</a></li>
         <li><a href="">second</a></li>
         <li><a href="">third</a></li>
        <!-- ... more here -->
      </ul>
   </nav>
</header>

我发现了.index()功能

我这样想:

$('body').on('click','header :not(li:first-child a) a',function(e){
     e.preventDefault();
     alert($(this).parents('ul').find('li').index(this));
});

但它总是警告:-1

我错过了什么?

2 个答案:

答案 0 :(得分:3)

尝试获得父母:

alert( $( this ).parent().index() );

答案 1 :(得分:0)

我建议:

$('body').on('click','header li + li a',function(e){
     e.preventDefault();
     console.log($(this).closest('li').index());
});

JS Fiddle demo

我认为问题是this方法中的index; as index返回当前匹配元素的索引与提供给方法的选择器,并且只有:一个当前/ this节点,b:当前在您尝试查找索引的元素的兄弟节点中,节点。因此返回-1(如果在给定数组中找不到元素,则在JavaScript中传统结果)。

另外,我改变了你的选择器;我假设你想要找到不是第一个 li的{​​{1}}的索引?但我可能误解了选择器或你的意图。

参考文献: