Ticket #10977 (closed bug: fixed)
Incorrect documentation for the index method?
| Reported by: | AbeMiessler@… | Owned by: | rwaldron |
|---|---|---|---|
| Priority: | high | Milestone: | None |
| Component: | traversing | Version: | 1.7.1 |
| Keywords: | Cc: | ||
| Blocking: | Blocked by: |
Description
You have the following documentation for index with no parameters:
If no argument is passed to the .index() method, the return value is an integer indicating the position of the first element within the jQuery object relative to its sibling elements.
But if you run this jQuery:
alert($("li:not(.disabled,.separator)").index());
Against this HTML:
<ul>
<li class="selected">First Item</li>
<li class="disabled">Second Item</li>
<li class="separator">Third Item</li>
<li>Fourth Item</li>
</ul>
It returns 3 instead of 0. You can see that the selector will find two elements (the first and last LI), but it returns the index of the last element, when your documentation says it will return the index of the first.
Can be seen in this fiddle: http://jsfiddle.net/Zf9Vv/
Change History
comment:2 Changed 18 months ago by anonymous
Culprit: https://github.com/jquery/jquery/commit/9a96af1d59cc6a10b89b6f2489b04871a9c1c7fa#src/traversing.js
Fix, add first()
return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1;
comment:3 Changed 18 months ago by rwaldron
- Owner set to rwaldron
- Priority changed from undecided to high
- Status changed from new to assigned
- Component changed from unfiled to traversing
comment:5 Changed 8 months ago by mikesherov
- Keywords needsdocs removed
- Status changed from assigned to closed
- Resolution set to notabug
comment:6 Changed 7 months ago by mikesherov
- Status changed from closed to reopened
- Resolution notabug deleted
comment:8 Changed 7 months ago by MORGAN
- Status changed from open to closed
- Resolution set to fixed
Return correct index for no-arg index() calls. Fixes #10977. Closes gh-971
Changeset: 4bb46f413a0e2f6933013b26d2aceddca6cf03f1
Please follow the bug reporting guidlines and use jsFiddle when providing test cases and demonstrations instead of pasting the code in the ticket.

I have tested this snippet in multiple jQuery versions, and discovered that it is a regression introduced in 1.6.3. Please see this question on StackOverflow (and specifically, this answer) that pinpoints the guilty code.