From 0066ba3f823fdf3e41aa805f54876312c8bd915a Mon Sep 17 00:00:00 2001 From: John Resig Date: Sat, 10 Jan 2009 20:30:03 +0000 Subject: .closest() with positional selectors wasn't worked as expected. --- src/core.js | 4 +++- test/unit/core.js | 5 ++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/core.js b/src/core.js index 4047170eb..24438e36b 100644 --- a/src/core.js +++ b/src/core.js @@ -342,10 +342,12 @@ jQuery.fn = jQuery.prototype = { }, closest: function( selector ) { + var pos = jQuery.expr.match.POS.test( selector ) ? jQuery(selector) : null; + return this.map(function(){ var cur = this; while ( cur && cur.ownerDocument ) { - if ( jQuery(cur).is(selector) ) + if ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selector) ) return cur; cur = cur.parentNode; } diff --git a/test/unit/core.js b/test/unit/core.js index 1ec3487d0..494917e08 100644 --- a/test/unit/core.js +++ b/test/unit/core.js @@ -1407,11 +1407,14 @@ test("filter()", function() { }); test("closest()", function() { - expect(4); + expect(6); isSet( jQuery("body").closest("body").get(), q("body"), "closest(body)" ); isSet( jQuery("body").closest("html").get(), q("html"), "closest(html)" ); isSet( jQuery("body").closest("div").get(), [], "closest(div)" ); isSet( jQuery("#main").closest("span,#html").get(), q("html"), "closest(span,#html)" ); + + isSet( jQuery("div:eq(1)").closest("div:first").get(), [], "closest(div:first)" ); + isSet( jQuery("div").closest("body:first div:last").get(), q("divWithNoTabIndex"), "closest(body:first div:last)" ); }); test("not()", function() { -- cgit v1.2.3