Merged in from Sizzle - a change to child filter selector logic.
[jquery.git] / src / selector.js
index e1e272b..085f0b3 100644 (file)
@@ -182,6 +182,8 @@ Sizzle.filter = function(expr, set, inplace, not){
 
                                        if ( !match ) {
                                                anyFound = found = true;
+                                       } else if ( match === true ) {
+                                               continue;
                                        } else if ( match[0] === true ) {
                                                goodArray = [];
                                                var last = null, elem;
@@ -411,6 +413,8 @@ var Expr = Sizzle.selectors = {
                                        }
                                        return false;
                                }
+                       } else if ( Expr.match.POS.test( match[0] ) ) {
+                               return true;
                        }
                        
                        return match;
@@ -509,9 +513,9 @@ var Expr = Sizzle.selectors = {
                CHILD: function(elem, match){
                        var type = match[1], parent = elem.parentNode;
 
-                       var doneName = match[0];
+                       var doneName = "child" + parent.childNodes.length;
                        
-                       if ( parent && !parent[ doneName ] ) {
+                       if ( parent && (!parent[ doneName ] || !elem.nodeIndex) ) {
                                var count = 1;
 
                                for ( var node = parent.firstChild; node; node = node.nextSibling ) {