Added support for .eq(-N), .first(), and .last(). Fixes #2164 and #4188.
authorJohn Resig <jeresig@gmail.com>
Wed, 9 Sep 2009 00:21:21 +0000 (00:21 +0000)
committerJohn Resig <jeresig@gmail.com>
Wed, 9 Sep 2009 00:21:21 +0000 (00:21 +0000)
src/traversing.js
test/unit/traversing.js

index f46820f..1342c59 100644 (file)
@@ -78,7 +78,17 @@ jQuery.fn.extend({
        },
 
        eq: function( i ) {
-               return this.slice( i, +i + 1 );
+               return i === -1 ?
+                       this.slice( i ) :
+                       this.slice( i, +i + 1 );
+       },
+
+       first: function() {
+               return this.eq( 0 );
+       },
+
+       last: function() {
+               return this.eq( -1 );
        },
 
        slice: function() {
index 1a7e6ee..46a49bb 100644 (file)
@@ -203,7 +203,7 @@ test("prev([String])", function() {
 });
 
 test("slice()", function() {
-       expect(6);
+       expect(7);
 
        var $links = jQuery("#ap a");
 
@@ -213,8 +213,20 @@ test("slice()", function() {
        isSet( $links.slice(-1), q("mark"), "slice(-1)" );
 
        isSet( $links.eq(1), q("groups"), "eq(1)" );
-
        isSet( $links.eq('2'), q("anchor1"), "eq('2')" );
+       isSet( $links.eq(-1), q("mark"), "eq(-1)" );
+});
+
+test("first()/last()", function() {
+       expect(4);
+
+       var $links = jQuery("#ap a"), $none = jQuery("asdf");
+
+       isSet( $links.first(), q("google"), "first()" );
+       isSet( $links.last(), q("mark"), "last()" );
+
+       isSet( $none.first(), [], "first() none" );
+       isSet( $none.last(), [], "last() none" );
 });
 
 test("map()", function() {