Reworked the attribute selection code to be able to select false-y values - and added...
authorJohn Resig <jeresig@gmail.com>
Mon, 9 Feb 2009 15:18:07 +0000 (15:18 +0000)
committerJohn Resig <jeresig@gmail.com>
Mon, 9 Feb 2009 15:18:07 +0000 (15:18 +0000)
src/selector.js
test/unit/selector.js

index 3dc8765..7c0bf40 100644 (file)
@@ -564,7 +564,16 @@ var Expr = Sizzle.selectors = {
                        return match.test( elem.className );
                },
                ATTR: function(elem, match){
-                       var result = Expr.attrHandle[ match[1] ] ? Expr.attrHandle[ match[1] ]( elem ) : elem[ match[1] ] || elem.getAttribute( match[1] ), value = result + "", type = match[2], check = match[4];
+                       var name = match[1],
+                               result = Expr.attrHandle[ name ] ?
+                                       Expr.attrHandle[ name ]( elem ) :
+                                       elem[ name ] != null ?
+                                               elem[ name ] :
+                                               elem.getAttribute( name ),
+                               value = result + "",
+                               type = match[2],
+                               check = match[4];
+
                        return result == null ?
                                type === "!=" :
                                type === "=" ?
@@ -574,7 +583,7 @@ var Expr = Sizzle.selectors = {
                                type === "~=" ?
                                (" " + value + " ").indexOf(check) >= 0 :
                                !check ?
-                               result :
+                               value && result !== false :
                                type === "!=" ?
                                value != check :
                                type === "^=" ?
index 4c63a7a..924f41d 100644 (file)
@@ -215,7 +215,7 @@ test("child and adjacent", function() {
 });
 
 test("attributes", function() {
-       expect(37);
+       expect(40);
        t( "Attribute Exists", "a[title]", ["google"] );
        t( "Attribute Exists", "*[title]", ["google"] );
        t( "Attribute Exists", "[title]", ["google"] );
@@ -233,6 +233,13 @@ test("attributes", function() {
 
        t( "for Attribute", "form label[for]", ["label-for"] );
        t( "for Attribute in form", "#form [for=action]", ["label-for"] );
+
+       jQuery("form input")[0].test = 0;
+       jQuery("form input")[1].test = 1;
+
+       t( "Expando attribute", "form input[test]", ["text1", "text2"] );
+       t( "Expando attribute value", "form input[test=0]", ["text1"] );
+       t( "Expando attribute value", "form input[test=1]", ["text2"] );
        
        t( "Attribute containing []", "input[name^='foo[']", ["hidden2"] );
        t( "Attribute containing []", "input[name^='foo[bar]']", ["hidden2"] );