Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Added support for .closest(filter, DOMElement). Fixes #4072.

  • Loading branch information...
commit d6991fa273515a8503692324499edcc71b5c3f64 1 parent 61b18c8
@jeresig jeresig authored
Showing with 9 additions and 3 deletions.
  1. +2 −2 src/traversing.js
  2. +7 −1 test/unit/traversing.js
View
4 src/traversing.js
@@ -51,13 +51,13 @@ jQuery.fn.extend({
return this.pushStack( jQuery.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;
View
8 test/unit/traversing.js
@@ -91,7 +91,7 @@ test("filter(jQuery)", function() {
})
test("closest()", function() {
- expect(6);
+ expect(9);
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)" );
@@ -99,6 +99,12 @@ test("closest()", function() {
isSet( jQuery("div:eq(1)").closest("div:first").get(), [], "closest(div:first)" );
isSet( jQuery("div").closest("body:first div:last").get(), q("fx-tests"), "closest(body:first div:last)" );
+
+ // Test .closest() limited by the context
+ var jq = jQuery("#nothiddendivchild");
+ isSet( jq.closest("html", document.body).get(), [], "Context limited." );
+ isSet( jq.closest("body", document.body).get(), [], "Context limited." );
+ isSet( jq.closest("#nothiddendiv", document.body).get(), q("nothiddendiv"), "Context not reached." );
});
test("not(Selector)", function() {
Please sign in to comment.
Something went wrong with that request. Please try again.