From 746074f0f74b0c0916fb2db2b6370c324822f31a Mon Sep 17 00:00:00 2001 From: Dave Methvin Date: Mon, 24 Oct 2011 18:05:53 -0400 Subject: [PATCH] Remove attribute match from quickIs As @timmywil points out, attributes and properties are confused by IE6/7. This commit also reworks the unit test case to do a better job of checking className matches. --- src/event.js | 11 +++++------ test/unit/event.js | 25 +++++++------------------ 2 files changed, 12 insertions(+), 24 deletions(-) diff --git a/src/event.js b/src/event.js index 23e9ca0e0..382ff3614 100644 --- a/src/event.js +++ b/src/event.js @@ -9,14 +9,14 @@ var rnamespaces = /\.(.*)$/, rhoverHack = /\bhover(\.\S+)?/, rkeyEvent = /^key/, rmouseEvent = /^(?:mouse|contextmenu)|click/, - rquickIs = /^([\w\-]+)?(?:#([\w\-]+))?(?:\.([\w\-]+))?(?:\[([\w+\-]+)=["']?([\w\-]*)["']?\])?$/, + rquickIs = /^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/, quickParse = function( selector ) { var quick = rquickIs.exec( selector ); if ( quick ) { - // 0 1 2 3 4 5 - // [ _, tag, id, class, attrName, attrValue ] + // 0 1 2 3 + // [ _, tag, id, class ] quick[1] = ( quick[1] || "" ).toLowerCase(); - quick[3] = quick[3] && new RegExp( "(?:^|\\w)" + quick[3] + "(?:\\w|$)" ); + quick[3] = quick[3] && new RegExp( "(?:^|\\s)" + quick[3] + "(?:\\s|$)" ); } return quick; }, @@ -24,8 +24,7 @@ var rnamespaces = /\.(.*)$/, return ( (!m[1] || elem.nodeName.toLowerCase() === m[1]) && (!m[2] || elem.id === m[2]) && - (!m[3] || m[3].test( elem.className )) && - (!m[4] || elem.getAttribute( m[4] ) == m[5]) + (!m[3] || m[3].test( elem.className )) ); }; diff --git a/test/unit/event.js b/test/unit/event.js index de9c225c1..35664b022 100644 --- a/test/unit/event.js +++ b/test/unit/event.js @@ -2409,11 +2409,11 @@ test(".on and .off", function() { }); test("delegated events quickIs", function() { - expect(17); + expect(14); var markup = jQuery( '
'+ '

'+ - 'deadbeatclub'+ + 'deadbeatclub'+ '

'+ ''+ 'workedorborked?'+ @@ -2437,29 +2437,18 @@ test("delegated events quickIs", function() { .appendTo( "body" ) .on( "blink", "em", func ) .on( "blink", ".D", func ) + .on( "blink", ".devo-like", func ) + .on( "blink", ".devo", func ) .on( "blink", ".d", func ) .on( "blink", "p.d", func ) - .on( "blink", "[devo=cool]", func ) - .on( "blink", "[devo='NO']", func ) .on( "blink", "#famous", func ); - check( "[devo=cool]", "b|[devo=cool] p|.D" ); - check( "[devo='']", "" ); + check( ".devo-like", "b|.devo-like p|.D" ); + check( ".devo", "" ); check( "p", "p|.D" ); - check( "b", "b|[devo=cool] p|.D" ); + check( "b", "b|.devo-like p|.D" ); check( "em", "em|em q|#famous em|em q|#famous" ); - markup.find( "b" ).attr( "devo", "NO" ); - check( "b", "b|[devo='NO'] p|.D" ); - - markup - .on( "blink", ".tricky", function() { - ok( false, "triggered on wrong class name match" ); - }) - .find( "p" ) - .attr( "class", "tricky-match" ) - .trigger( "blink" ); - markup.remove(); });