aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Resig <jeresig@gmail.com>2009-01-10 20:30:03 +0000
committerJohn Resig <jeresig@gmail.com>2009-01-10 20:30:03 +0000
commit0066ba3f823fdf3e41aa805f54876312c8bd915a (patch)
tree683906504ed2ec0a47c1daac7b58a9f1b38ccfd4
parentb1018cad1256a7b9cc47e675b2a9e22c409b7aed (diff)
downloadjquery-0066ba3f823fdf3e41aa805f54876312c8bd915a.tar.gz
jquery-0066ba3f823fdf3e41aa805f54876312c8bd915a.zip
.closest() with positional selectors wasn't worked as expected.
-rw-r--r--src/core.js4
-rw-r--r--test/unit/core.js5
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() {