Ticket #2771 (closed bug: fixed)
jQuery.index cannot index the jQuery object
| Reported by: | ericsk | Owned by: | flesler |
|---|---|---|---|
| Priority: | minor | Milestone: | 1.2.4 |
| Component: | core | Version: | 1.2.3 |
| Keywords: | index | Cc: | |
| Blocking: | Blocked by: |
Description
While using jQuery.index like this:
...
var target = $(e.target);
var target_index = $('.item').index(target);
...
it always returns -1 (i.e. NOT FOUND).
I suggest to apply the patch in the attachment to core.js (revision 5375).
Attachments
Change History
Changed 5 years ago by ericsk
-
attachment
core.js.patch
added
comment:1 Changed 5 years ago by scott.gonzal
If this concept is approved, this would probably be better:
elem = elem[0] || elem;
comment:2 Changed 5 years ago by flesler
Disagree...
If you accept collections then they can have more than one element, that means that you get the index of the first item found from the collection.
If this is just a shortcut for $().index( target[0] ); then just do that in your code, not internally.
comment:3 Changed 5 years ago by joern
The shortcut would indeed be helpful as it would improve API consistancy quite a bit. Most other jQuery methods that accept an selector work with a string (css etc. selector) and a single or an array of dom elements. I don't know how many times I tried to use index() expecting that it would use just the first element of my jQuery object, but it happended often. Instead it just returns not-found...
comment:4 Changed 5 years ago by flesler
- need changed from Review to Commit
- Owner set to flesler
- Status changed from new to assigned
I crafted a modified version of .index() that supports collections, even with many elements. While doing this, I discovered that on IE, window == document, so this could yield some unexpected results when both are in a collection. I also added a return false, so that when the first index is found, it stops looping.
Here I attach the diff, if you want to discuss/test/benchmark it, be my guest. Let me know when I can commit this.
Please follow the bug reporting guidlines and use jsFiddle when providing test cases and demonstrations instead of pasting the code in the ticket.

the patch file of core.js