Bug Tracker

Opened 15 years ago

Closed 15 years ago

Last modified 14 years ago

#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:


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)

core.js.patch (395 bytes) - added by ericsk 15 years ago.
the patch file of core.js
index.diff (441 bytes) - added by flesler 15 years ago.
Passes all the tests, on all browsers.

Download all attachments as: .zip

Change History (8)

Changed 15 years ago by ericsk

Attachment: core.js.patch added

the patch file of core.js

comment:1 Changed 15 years ago by scott.gonzal

If this concept is approved, this would probably be better:

elem = elem[0] || elem;

comment:2 Changed 15 years ago by flesler


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 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 15 years ago by flesler

need: ReviewCommit
Owner: set to flesler
Status: newassigned

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.

Changed 15 years ago by flesler

Attachment: index.diff added

Passes all the tests, on all browsers.

comment:5 Changed 15 years ago by flesler

Resolution: fixed
Status: assignedclosed

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.

comment:6 Changed 15 years ago by flesler

Added 2 tests at [5505].

Note: See TracTickets for help on using tickets.