Side navigation
#3971 closed enhancement (fixed)
Opened January 23, 2009 03:43AM UTC
Closed May 02, 2009 07:24PM UTC
Last modified May 02, 2009 07:34PM UTC
.index() enhancement
Reported by: | ajpiano | Owned by: | brandon |
---|---|---|---|
Priority: | major | Milestone: | 1.4 |
Component: | core | Version: | 1.3.1 |
Keywords: | Cc: | ||
Blocked by: | Blocking: |
Description
It would be useful to be able to use the .index() method to find the index of the current element in a given set, rather than the current implementation (searching the current set for a given element), which forces the developer to do gyrations in order to find out a simple piece of info.
jQuery.fn.index = function(elem){ // legacy implementation if ( typeof elem === 'object'){ return jQuery.inArray( elem && elem.jquery ? elem[0] : elem , this ); } //return the index of the element in a new jQuery obj from selector, or by default, amongst its own siblings. return jQuery.inArray(this[0], elem ? jQuery(elem) : this.parent().children() ); };
as per: http://groups.google.com/group/jquery-dev/browse_thread/thread/f5e07e2f81011d8b
Attachments (2)
Change History (5)
Changed March 05, 2009 09:02PM UTC by comment:1
Changed May 02, 2009 03:27PM UTC by comment:2
description: | It would be useful to be able to use the .index() method to find the index of the current element in a given set, rather than the current implementation (searching the current set for a given element), which forces the developer to do gyrations in order to find out a simple piece of info. \ \ jQuery.fn.index = function(elem){ \ \ // legacy implementation \ if ( typeof elem === 'object'){ \ return jQuery.inArray( \ elem && elem.jquery ? elem[0] : elem \ , this ); \ } \ //return the index of the element in a new jQuery obj from selector, or by default, amongst its own siblings. \ return jQuery.inArray(this[0], \ elem ? jQuery(elem) : this.parent().children() ); \ \ }; \ \ as per: http://groups.google.com/group/jquery-dev/browse_thread/thread/f5e07e2f81011d8b → It would be useful to be able to use the .index() method to find the index of the current element in a given set, rather than the current implementation (searching the current set for a given element), which forces the developer to do gyrations in order to find out a simple piece of info. \ \ {{{ \ jQuery.fn.index = function(elem){ \ \ // legacy implementation \ if ( typeof elem === 'object'){ \ return jQuery.inArray( \ elem && elem.jquery ? elem[0] : elem \ , this ); \ } \ //return the index of the element in a new jQuery obj from selector, or by default, amongst its own siblings. \ return jQuery.inArray(this[0], \ elem ? jQuery(elem) : this.parent().children() ); \ \ }; \ }}} \ as per: http://groups.google.com/group/jquery-dev/browse_thread/thread/f5e07e2f81011d8b |
---|
Changed May 02, 2009 06:16PM UTC by comment:3
owner: | → brandon |
---|
Changed May 02, 2009 07:24PM UTC by comment:4
milestone: | 1.3.2 → 1.3.3 |
---|---|
resolution: | → fixed |
status: | new → closed |
While I can understand the potential confusion about passing a jQuery collection vs a selector. This is something that can be cleared up with proper documentation.
Added in r6330.
Changed May 02, 2009 07:34PM UTC by comment:5
woo, thanks for taking care of this.
Just added a proper patch. Comes with four unit tests, as well.
One thing I recognized while cleaning this up is that in this case, passing a selector into index() vs passing an jquery object of those same elements will give different results.
Because index() can't determine if you're passing a jquery object as an argument because you'd want to see the relative index, or you want to use the legacy implementation of elems.index($(this))
This is a weird break in the expected API, so it may be worth either:
a) removing the $(this).index(selector) functionality
b) renaming this enhanced method .indexWithin() or something.
I still feel strongly that providing the $(this).index() technique is a valuable (and very jquery-like) addition.
Curious what others think about this.