2773: first pass adding node/jQuery object support to jQuery.fn.find; unit tests added
This commit is contained in:
parent
8246347b71
commit
7a69e34a5c
|
@ -88,7 +88,7 @@ jQuery.fn = jQuery.prototype = {
|
||||||
if ( selector === "body" && !context && document.body ) {
|
if ( selector === "body" && !context && document.body ) {
|
||||||
this.context = document;
|
this.context = document;
|
||||||
this[0] = document.body;
|
this[0] = document.body;
|
||||||
this.selector = "body";
|
this.selector = selector;
|
||||||
this.length = 1;
|
this.length = 1;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,17 +17,30 @@ var runtil = /Until$/,
|
||||||
|
|
||||||
jQuery.fn.extend({
|
jQuery.fn.extend({
|
||||||
find: function( selector ) {
|
find: function( selector ) {
|
||||||
var ret = this.pushStack( "", "find", selector ),
|
var self = this,
|
||||||
length = 0;
|
ret, i, l;
|
||||||
|
|
||||||
for ( var i = 0, l = this.length; i < l; i++ ) {
|
if ( typeof selector !== "string" ) {
|
||||||
|
return jQuery( selector ).filter(function() {
|
||||||
|
for ( i = 0, l = self.length; i < l; i++ ) {
|
||||||
|
if ( jQuery.contains( self[ i ], this ) ) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = this.pushStack( "", "find", selector );
|
||||||
|
|
||||||
|
var length, n, r;
|
||||||
|
for ( i = 0, l = this.length; i < l; i++ ) {
|
||||||
length = ret.length;
|
length = ret.length;
|
||||||
jQuery.find( selector, this[i], ret );
|
jQuery.find( selector, this[i], ret );
|
||||||
|
|
||||||
if ( i > 0 ) {
|
if ( i > 0 ) {
|
||||||
// Make sure that the results are unique
|
// Make sure that the results are unique
|
||||||
for ( var n = length; n < ret.length; n++ ) {
|
for ( n = length; n < ret.length; n++ ) {
|
||||||
for ( var r = 0; r < length; r++ ) {
|
for ( r = 0; r < length; r++ ) {
|
||||||
if ( ret[r] === ret[n] ) {
|
if ( ret[r] === ret[n] ) {
|
||||||
ret.splice(n--, 1);
|
ret.splice(n--, 1);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -14,12 +14,27 @@ test("find(String)", function() {
|
||||||
});
|
});
|
||||||
|
|
||||||
test("find(node|jQuery object)", function() {
|
test("find(node|jQuery object)", function() {
|
||||||
expect( 2 );
|
expect( 11 );
|
||||||
|
|
||||||
|
var $foo = jQuery('#foo'),
|
||||||
|
$blog = jQuery('.blogTest'),
|
||||||
|
$first = jQuery('#first'),
|
||||||
|
$two = $blog.add( $first ),
|
||||||
|
$fooTwo = $foo.add( $blog );
|
||||||
|
|
||||||
|
equals( $foo.find( $blog ).text(), 'Yahoo', 'Find with blog jQuery object' );
|
||||||
|
equals( $foo.find( $blog[0] ).text(), 'Yahoo', 'Find with blog node' );
|
||||||
|
equals( $foo.find( $first ).length, 0, '#first is not in #foo' );
|
||||||
|
equals( $foo.find( $first[0]).length, 0, '#first not in #foo (node)' );
|
||||||
|
ok( $foo.find( $two ).is('.blogTest'), 'Find returns only nodes within #foo' );
|
||||||
|
ok( $fooTwo.find( $blog ).is('.blogTest'), 'Blog is part of the collection, but also within foo' );
|
||||||
|
ok( $fooTwo.find( $blog[0] ).is('.blogTest'), 'Blog is part of the collection, but also within foo(node)' );
|
||||||
|
|
||||||
|
equals( $two.find( $foo ).length, 0, 'Foo is not in two elements' );
|
||||||
|
equals( $two.find( $foo[0] ).length, 0, 'Foo is not in two elements(node)' );
|
||||||
|
equals( $two.find( $first ).length, 0, 'first is in the collection and not within two' );
|
||||||
|
equals( $two.find( $first ).length, 0, 'first is in the collection and not within two(node)' );
|
||||||
|
|
||||||
var $blog = jQuery('.blogTest'),
|
|
||||||
blog = $blog[0];
|
|
||||||
equals( jQuery('#foo').find( $blog ).text(), 'Yahoo', 'Find with blog jQuery object' );
|
|
||||||
equals( jQuery('#foo').find( blog ).text(), 'Yahoo', 'Find with blog node' );
|
|
||||||
});
|
});
|
||||||
|
|
||||||
test("is(String)", function() {
|
test("is(String)", function() {
|
||||||
|
|
Loading…
Reference in a new issue