Fixed an issue with :nth-child selectors embedded in :not() filters. Fixes jQuery...
[jquery.git] / src / selector.js
index 69ea36c..505198b 100644 (file)
@@ -422,7 +422,7 @@ var Expr = Sizzle.selectors = {
                                        }
                                        return false;
                                }
-                       } else if ( Expr.match.POS.test( match[0] ) ) {
+                       } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
                                return true;
                        }
                        
@@ -519,6 +519,25 @@ var Expr = Sizzle.selectors = {
                }
        },
        filter: {
+               PSEUDO: function(elem, match, i, array){
+                       var name = match[1], filter = Expr.filters[ name ];
+
+                       if ( filter ) {
+                               return filter( elem, i, match, array );
+                       } else if ( name === "contains" ) {
+                               return (elem.textContent || elem.innerText || "").indexOf(match[3]) >= 0;
+                       } else if ( name === "not" ) {
+                               var not = match[3];
+
+                               for ( var i = 0, l = not.length; i < l; i++ ) {
+                                       if ( not[i] === elem ) {
+                                               return false;
+                                       }
+                               }
+
+                               return true;
+                       }
+               },
                CHILD: function(elem, match){
                        var type = match[1], node = elem;
                        switch (type) {
@@ -562,25 +581,6 @@ var Expr = Sizzle.selectors = {
                                        }
                        }
                },
-               PSEUDO: function(elem, match, i, array){
-                       var name = match[1], filter = Expr.filters[ name ];
-
-                       if ( filter ) {
-                               return filter( elem, i, match, array );
-                       } else if ( name === "contains" ) {
-                               return (elem.textContent || elem.innerText || "").indexOf(match[3]) >= 0;
-                       } else if ( name === "not" ) {
-                               var not = match[3];
-
-                               for ( var i = 0, l = not.length; i < l; i++ ) {
-                                       if ( not[i] === elem ) {
-                                               return false;
-                                       }
-                               }
-
-                               return true;
-                       }
-               },
                ID: function(elem, match){
                        return elem.nodeType === 1 && elem.getAttribute("id") === match;
                },