rparentsprev = /^(?:parents|prevUntil|prevAll)/,
// Note: This RegExp should be improved, or likely pulled from Sizzle
rmultiselector = /,/,
- slice = Array.prototype.slice,
- join = Array.prototype.join;
+ slice = Array.prototype.slice;
// Implement the identical functionality for filter and not
var winnow = function( elements, qualifier, keep ) {
if ( jQuery.isFunction( qualifier ) ) {
return jQuery.grep(elements, function(elem, i) {
- return !!qualifier.call( elem, i ) === keep;
+ return !!qualifier.call( elem, i, elem ) === keep;
});
} else if ( qualifier.nodeType ) {
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);
},
slice: function() {
return this.pushStack( slice.apply( this, arguments ),
- "slice", join.call(arguments, ",") );
+ "slice", slice.call(arguments).join(",") );
},
map: function( callback ) {
ret = ret.reverse();
}
- return this.pushStack( ret, name, join.call(arguments, ",") );
+ return this.pushStack( ret, name, slice.call(arguments).join(",") );
};
});