Skip to content
Permalink
Browse files

Implemented support for .context limited .closest() calls. Fixes #4072.

  • Loading branch information
jeresig committed Jul 25, 2009
1 parent 343b093 commit cae93c39eb57ccc2acc5e101eda7a56e0a734cdf
Showing with 11 additions and 4 deletions.
  1. +4 −3 src/traversing.js
  2. +7 −1 test/unit/traversing.js
@@ -53,11 +53,12 @@ jQuery.fn.extend({

closest: function( selector ) {
var pos = jQuery.expr.match.POS.test( selector ) ? jQuery(selector) : null,
closer = 0;
closer = 0,
context = this.context;

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;
@@ -120,4 +121,4 @@ jQuery.each({

return this.pushStack( jQuery.unique( ret ), name, selector );
};
});
});
@@ -91,14 +91,20 @@ 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)" );
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("fx-tests"), "closest(body:first div:last)" );

// Test .closest() limited by the context
var jq = jQuery("#nothiddendivchild", document.body);
isSet( jq.closest("html").get(), [], "Context limited." );
isSet( jq.closest("body").get(), [], "Context limited." );
isSet( jq.closest("#nothiddendiv").get(), q("nothiddendiv"), "Context not reached." );
});

test("not(Selector)", function() {

0 comments on commit cae93c3

Please sign in to comment.
You can’t perform that action at this time.