Skip to content

Commit

Permalink
Reworked the attribute selection code to be able to select false-y va…
Browse files Browse the repository at this point in the history
…lues - and added some tests to verify that they work well against expandos.
  • Loading branch information
jeresig committed Feb 9, 2009
1 parent ab74ce7 commit b16da9d
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 3 deletions.
13 changes: 11 additions & 2 deletions src/selector.js
Expand Up @@ -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 === "=" ?
Expand All @@ -574,7 +583,7 @@ var Expr = Sizzle.selectors = {
type === "~=" ?
(" " + value + " ").indexOf(check) >= 0 :
!check ?
result :
value && result !== false :
type === "!=" ?
value != check :
type === "^=" ?
Expand Down
9 changes: 8 additions & 1 deletion test/unit/selector.js
Expand Up @@ -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"] );
Expand All @@ -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"] );
Expand Down

0 comments on commit b16da9d

Please sign in to comment.