Skip to content

Commit

Permalink
Landing in jQuery.contains, jQuery.fn.contains, and jQuery.fn.has sup…
Browse files Browse the repository at this point in the history
…port. Fixes #4101.
  • Loading branch information
wycats authored and jeresig committed Dec 9, 2009
1 parent 9e60fec commit 4e27f17
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 1 deletion.
1 change: 1 addition & 0 deletions src/sizzle-jquery.js
Expand Up @@ -4,5 +4,6 @@ jQuery.expr[":"] = jQuery.expr.filters;
jQuery.unique = Sizzle.uniqueSort;
jQuery.getText = getText;
jQuery.isXMLDoc = isXML;
jQuery.contains = contains;

return;
15 changes: 15 additions & 0 deletions src/traversing.js
Expand Up @@ -57,6 +57,21 @@ jQuery.fn.extend({
return ret;
},

has: function( target ) {
var targets = jQuery( target );
return this.filter(function() {
for ( var i = 0, l = targets.length; i < l; i++ ) {
if ( jQuery.contains( this, targets[i] ) ) {
return true;
}
}
});
},

contains: function( target ) {
return this.has( target ).length > 0;
},

not: function( selector ) {
return this.pushStack( winnow(this, selector, false), "not", selector);
},
Expand Down
38 changes: 37 additions & 1 deletion test/unit/traversing.js
Expand Up @@ -152,7 +152,43 @@ test("not(jQuery)", function() {
expect(1);

same( jQuery("p").not(jQuery("#ap, #sndp, .result")).get(), q("firstp", "en", "sap", "first"), "not(jQuery)" );
})
});

test("has(Element)", function() {
expect(2);

var obj = jQuery("#main").has(jQuery("#sndp")[0]);
same( obj.get(), q("main"), "Keeps elements that have the element as a descendant" );

var multipleParent = jQuery("#main, #header").has(jQuery("#sndp")[0]);
same( obj.get(), q("main"), "Does not include elements that do not have the element as a descendant" );
});

test("has(Selector)", function() {
expect(3);

var obj = jQuery("#main").has("#sndp");
same( obj.get(), q("main"), "Keeps elements that have any element matching the selector as a descendant" );

var multipleParent = jQuery("#main, #header").has("#sndp");
same( obj.get(), q("main"), "Does not include elements that do not have the element as a descendant" );

var multipleHas = jQuery("#main").has("#sndp, #first");
same( multipleHas.get(), q("main"), "Only adds elements once" );
});

test("has(Arrayish)", function() {
expect(3);

var simple = jQuery("#main").has(jQuery("#sndp"));
same( simple.get(), q("main"), "Keeps elements that have any element in the jQuery list as a descendant" );

var multipleParent = jQuery("#main, #header").has(jQuery("#sndp"));
same( multipleParent.get(), q("main"), "Does not include elements that do not have an element in the jQuery list as a descendant" );

var multipleHas = jQuery("#main").has(jQuery("#sndp, #first"));
same( simple.get(), q("main"), "Only adds elements once" );
});

test("andSelf()", function() {
expect(4);
Expand Down

0 comments on commit 4e27f17

Please sign in to comment.