Handle child selectors in particular - away from the selector engine. Fixes #7029.
authorJohn Resig <jeresig@gmail.com>
Tue, 28 Sep 2010 17:33:21 +0000 (10:33 -0700)
committerJohn Resig <jeresig@gmail.com>
Tue, 28 Sep 2010 17:33:21 +0000 (10:33 -0700)
src/traversing.js
test/unit/traversing.js

index dff1087..f57819d 100644 (file)
@@ -4,11 +4,17 @@ var runtil = /Until$/,
        rparentsprev = /^(?:parents|prevUntil|prevAll)/,
        // Note: This RegExp should be improved, or likely pulled from Sizzle
        rmultiselector = /,/,
+       rchild = /^\s*>/,
        isSimple = /^.[^:#\[\.,]*$/,
        slice = Array.prototype.slice;
 
 jQuery.fn.extend({
        find: function( selector ) {
+               // Handle "> div" child selectors and pass them to .children()
+               if ( typeof selector === "string" && rchild.test( selector ) ) {
+                       return this.children( selector.replace( rchild, "" ) );
+               }
+
                var ret = this.pushStack( "", "find", selector ), length = 0;
 
                for ( var i = 0, l = this.length; i < l; i++ ) {
index f5c88e4..0636f0c 100644 (file)
@@ -1,12 +1,14 @@
 module("traversing");
 
 test("find(String)", function() {
-       expect(2);
+       expect(3);
        equals( 'Yahoo', jQuery('#foo').find('.blogTest').text(), 'Check for find' );
 
        // using contents will get comments regular, text, and comment nodes
        var j = jQuery("#nonnodes").contents();
        equals( j.find("div").length, 0, "Check node,textnode,comment to find zero divs" );
+
+       same( jQuery("#main").find("> div").get(), q("foo", "moretests", "tabindex-tests", "liveHandlerOrder", "siblingTest"), "find child elements" );
 });
 
 test("is(String)", function() {