#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: | |
Blocked by: | Blocking: |
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 (2)
Change History (8)
Changed 15 years ago by
Attachment: | core.js.patch added |
---|
comment:1 Changed 15 years ago by
If this concept is approved, this would probably be better:
elem = elem[0] || elem;
comment:2 Changed 15 years ago by
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 15 years ago by
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 15 years ago by
need: | Review → Commit |
---|---|
Owner: | set to flesler |
Status: | new → 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.
comment:5 Changed 15 years ago by
Resolution: | → fixed |
---|---|
Status: | assigned → closed |
Applied at [5500], changed the diff a bit, the === is applied to $.inArray, and this function is used in $.fn.index. If a jQuery object is received, only the first element is used.
the patch file of core.js