0

假设我们有这个标记:

<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

我错过了什么?

4

2 回答 2

3

试着让父母:

alert( $( this ).parent().index() );
于 2013-06-11T11:19:47.190 回答
0

我建议:

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

JS 小提琴演示

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

另外,我更改了您的选择器;我假设您想找到li不是第一个 li的索引?但我可能误解了选择器或您的意图。

参考:

于 2013-06-11T11:21:36.730 回答