Traversing: Check all pairwise element combinations for .find( els )

Ref b8d0d54a3c
Fixes #14701
This commit is contained in:
Richard Gibson 2014-01-17 00:38:56 -05:00
parent a2250b0f4c
commit 391c21b15d
2 changed files with 7 additions and 6 deletions

View File

@ -53,14 +53,14 @@ jQuery.filter = function( expr, elems, not ) {
jQuery.fn.extend({ jQuery.fn.extend({
find: function( selector ) { find: function( selector ) {
var i = 0, var i,
len = this.length, len = this.length,
ret = [], ret = [],
self = this; self = this;
if ( typeof selector !== "string" ) { if ( typeof selector !== "string" ) {
return this.pushStack( jQuery( selector ).filter(function() { return this.pushStack( jQuery( selector ).filter(function() {
for ( ; i < len; i++ ) { for ( i = 0; i < len; i++ ) {
if ( jQuery.contains( self[ i ], this ) ) { if ( jQuery.contains( self[ i ], this ) ) {
return true; return true;
} }
@ -68,8 +68,7 @@ jQuery.fn.extend({
}) ); }) );
} }
i = 0; for ( i = 0; i < len; i++ ) {
for ( ; i < len; i++ ) {
jQuery.find( selector, self[ i ], ret ); jQuery.find( selector, self[ i ], ret );
} }

View File

@ -24,19 +24,21 @@ test( "find(leading combinator)", function() {
}); });
test( "find(node|jQuery object)", function() { test( "find(node|jQuery object)", function() {
expect( 12 ); expect( 13 );
var $foo = jQuery("#foo"), var $foo = jQuery("#foo"),
$blog = jQuery(".blogTest"), $blog = jQuery(".blogTest"),
$first = jQuery("#first"), $first = jQuery("#first"),
$two = $blog.add( $first ), $two = $blog.add( $first ),
$twoMore = jQuery("#ap").add( $blog ),
$fooTwo = $foo.add( $blog ); $fooTwo = $foo.add( $blog );
equal( $foo.find( $blog ).text(), "Yahoo", "Find with blog jQuery object" ); equal( $foo.find( $blog ).text(), "Yahoo", "Find with blog jQuery object" );
equal( $foo.find( $blog[ 0 ] ).text(), "Yahoo", "Find with blog node" ); equal( $foo.find( $blog[ 0 ] ).text(), "Yahoo", "Find with blog node" );
equal( $foo.find( $first ).length, 0, "#first is not in #foo" ); equal( $foo.find( $first ).length, 0, "#first is not in #foo" );
equal( $foo.find( $first[ 0 ]).length, 0, "#first not in #foo (node)" ); equal( $foo.find( $first[ 0 ]).length, 0, "#first not in #foo (node)" );
ok( $foo.find( $two ).is(".blogTest"), "Find returns only nodes within #foo" ); deepEqual( $foo.find( $two ).get(), $blog.get(), "Find returns only nodes within #foo" );
deepEqual( $foo.find( $twoMore ).get(), $blog.get(), "...regardless of order" );
ok( $fooTwo.find( $blog ).is(".blogTest"), "Blog is part of the collection, but also 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)" ); ok( $fooTwo.find( $blog[ 0 ] ).is(".blogTest"), "Blog is part of the collection, but also within foo(node)" );