帮助我疯狂......
.index()
函数没有为我返回正确的索引,除非我有index()的整个概念错误:)
所以这就是它背后的逻辑
<div class="sections">Section 1</div>
<div class="sections">Section 2</div>
<div class="sections">Section 3</div>
<div class="sections">Section 4</div>
.sections{display:none;} //css
$('.sections:eq(1)').show();// shows sectiond 2 text
$('.sections:visible').index();// returns 2 I expected 1
实际网站
<div class="sections">Section 1</div>
var section = $('.sections:visible').index();// returns 2
console.log($('.sections:visible').length); // returns 1
console.log($('.sections').length); // returns 1 as well since there is one section
window.location.hash = 'section-'+section;// url hash is #section-2
答案 0 :(得分:5)
在正确阅读.index()
http://api.jquery.com/index/后,我发现如果您将列表指定为属性,则可以解决问题。
e.g。
<div class="wrap">
<div>First Page</div>
<div class="sections">Section 1</div>
<div class="sections">Section 2</div>
<div class="sections">Section 3</div>
<div class="sections">Section 4</div>
</div>Last Page</div>
</div>
仅使用$('.sections:visible').index();
会返回错误的结果first page
和last page are also included on the list (which is what I had).
所以为了解决这个问题,我必须做以下几点。
$('.sections:visible').index($('.sections'));
换句话说,我们要从:visible
$('.selections')
的索引
希望这有助于其他人:)
答案 1 :(得分:1)
我认为你混淆了一些东西。数组中的索引1表示整个集合的第二个元素。 jquery的选择器总是返回一个数组。
查看Visual Jquery的'.eq()'
答案 2 :(得分:0)
$('.sections:visible').index($('.sections'));
换句话说,我们说是从$('.selections')
列表中找到:visible的索引
不带参数时,它给出选择器的索引。有了论点,它反过来起作用。由于.sections
不是.sections:visible
的一部分,因此给出-1(未找到)。
所以正确的答案是:
$('.sections').index($('.sections:visible'));