jquery .index()函数返回错误

时间:2011-04-06 11:25:11

标签: jquery function indexing core

帮助我疯狂...... .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

3 个答案:

答案 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 pagelast 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'));