Skip to content
Permalink
Browse files

Allow second argument to be passed to array.indexOf. Fixes #9453.

  • Loading branch information...
timmywil authored and timmywil committed May 28, 2011
1 parent 25205d3 commit 2e0c9bfd364d990051fc3de94d7abd4194b6ce7d
Showing with 49 additions and 10 deletions.
  1. +13 −10 src/core.js
  2. +36 −0 test/unit/core.js
@@ -682,18 +682,21 @@ jQuery.extend({
return ret;
},

inArray: function( elem, array ) {
if ( !array ) {
return -1;
}
inArray: function( elem, array, i ) {
var len;

if ( indexOf ) {
return indexOf.call( array, elem );
}
if ( array ) {
if ( indexOf ) {
return indexOf.call( array, elem, i );
}

for ( var i = 0, length = array.length; i < length; i++ ) {
if ( array[ i ] === elem ) {
return i;
len = array.length;
i = i && i < 0 ? Math.max( 0, len + i ) : 0;

for ( ; i < len; i++ ) {
if ( array[ i ] === elem ) {
return i;
}
}
}

@@ -627,6 +627,42 @@ test("toArray()", function() {
"Convert jQuery object to an Array" )
})

test("inArray()", function() {
expect(19);

var selections = {
p: q("firstp", "sap", "ap", "first"),
em: q("siblingnext", "siblingfirst"),
div: q("qunit-testrunner-toolbar", "nothiddendiv", "nothiddendivchild", "foo"),
a: q("mark", "groups", "google", "simon1"),
empty: []
},
tests = {
p: { elem: jQuery("#ap")[0], index: 2 },
em: { elem: jQuery("#siblingfirst")[0], index: 1 },
div: { elem: jQuery("#nothiddendiv")[0], index: 1 },
a: { elem: jQuery("#simon1")[0], index: 3 }
},
falseTests = {
p: jQuery("#liveSpan1")[0],
em: jQuery("#nothiddendiv")[0],
empty: ""
};

jQuery.each( tests, function( key, obj ) {
equal( jQuery.inArray( obj.elem, selections[ key ] ), obj.index, "elem is in the array of selections of its tag" );
// Third argument (fromIndex)
equal( !!~jQuery.inArray( obj.elem, selections[ key ], 5 ), false, "elem is NOT in the array of selections given a starting index greater than its position" );
equal( !!~jQuery.inArray( obj.elem, selections[ key ], 1 ), true, "elem is in the array of selections given a starting index less than or equal to its position" );
equal( !!~jQuery.inArray( obj.elem, selections[ key ], -3 ), true, "elem is in the array of selections given a negative index" );
});

jQuery.each( falseTests, function( key, elem ) {
equal( !!~jQuery.inArray( elem, selections[ key ] ), false, "elem is NOT in the array of selections" );
});

});

test("get(Number)", function() {
expect(2);
equals( jQuery("#qunit-fixture p").get(0), document.getElementById("firstp"), "Get A Single Element" );

0 comments on commit 2e0c9bf

Please sign in to comment.
You can’t perform that action at this time.