Make jQuery.winnow a local function
[jquery.git] / src / traversing.js
index db446cf..0e379c7 100644 (file)
@@ -1,4 +1,4 @@
-jQuery.winnow = function( elements, qualifier, keep ) {
+var winnow = function( elements, qualifier, keep ) {
        if(jQuery.isFunction( qualifier )) {
                return jQuery.grep(elements, function(elem, i) {
                        return !!qualifier.call( elem, i ) === keep;
@@ -44,20 +44,20 @@ jQuery.fn.extend({
        },
 
        not: function( selector ) {
-               return this.pushStack( jQuery.winnow(this, selector, false), "not", selector);
+               return this.pushStack( winnow(this, selector, false), "not", selector);
        },
 
        filter: function( selector ) {
-               return this.pushStack( jQuery.winnow(this, selector, true), "filter", selector );
+               return this.pushStack( winnow(this, selector, true), "filter", selector );
        },
 
-       closest: function( selector ) {
+       closest: function( selector, context ) {
                var pos = jQuery.expr.match.POS.test( selector ) ? jQuery(selector) : null,
                        closer = 0;
 
                return this.map(function(){
                        var cur = this;
-                       while ( cur && cur.ownerDocument ) {
+                       while ( cur && cur.ownerDocument && cur !== context ) {
                                if ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selector) ) {
                                        jQuery.data(cur, "closest", closer);
                                        return cur;
@@ -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() {