Skip to content
Permalink
Browse files

Clean up the quick selector expression parsing code.

  • Loading branch information...
dmethvin authored and timmywil committed Aug 14, 2011
1 parent 990c094 commit bb1081ee448b4cbdba8f6b1ae98b29a08f9bfff8
Showing with 27 additions and 24 deletions.
  1. +27 −24 src/event.js
@@ -7,12 +7,32 @@ var rnamespaces = /\.(.*)$/,
rescape = /[^\w\s.|`]/g,
rtypenamespace = /^([^\.]*)?(?:\.(.+))?$/,
rhoverHack = /\bhover(\.\S+)?/,
rquickIs = /^([\w\-]+)?(?:#([\w\-]+))?(?:\.([\w\-]+))?(?:\[([\w+\-]+)=["']?([\w\-]*)["']?\])?(:first-child|:last-child|:empty)?$/,
rquickIs = /^([\w\-]+)?(?:#([\w\-]+))?(?:\.([\w\-]+))?(?:\[([\w+\-]+)=["']?([\w\-]*)["']?\])?(?::(first-child|last-child|empty))?$/,
quickPseudoMap = {
":empty": "firstChild",
":first-child": "previousSibling",
":last-child": "nextSibling"
};
"empty": "firstChild",
"first-child": "previousSibling",
"last-child": "nextSibling"
},
quickParse = function( selector ) {
var quick = rquickIs.exec( selector );
if ( quick ) {
// 0 1 2 3 4 5 6
// [ _, tag, id, class, attrName, attrValue, pseudo(:empty :first-child :last-child) ]
quick[1] = ( quick[1] || "" ).toLowerCase();
quick[3] = quick[3] && new RegExp( "\\b" + quick[3] + "\\b" );
quick[6] = quickPseudoMap[ quick[6] ];
}
return quick;
},
quickIs = function( elem, m ) {
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[6] || !elem[ m[6] ])
);
}

function useNativeMethod( event ) {
if ( !event.isDefaultPrevented() && this[ event.type ] ) {
@@ -91,14 +111,8 @@ jQuery.event = {
// Delegated event setup
if ( selector ) {
// Pre-analyze selector so we can process it quickly on event dispatch
quick = handleObj.quick = rquickIs.exec( selector );
if ( quick ) {
// 0 1 2 3 4 5 6
// [ _, tag, id, class, attrName, attrValue, pseudo(:empty :first-child :last-child) ]
quick[1] = ( quick[1] || "" ).toLowerCase();
quick[3] = quick[3] && new RegExp( "\\b" + quick[3] + "\\b" );
quick[6] = quickPseudoMap[ quick[6] ];
} else if ( jQuery.expr.match.POS.test( selector ) ) {
handleObj.quick = quickParse( selector );
if ( !handleObj.quick && jQuery.expr.match.POS.test( selector ) ) {
handleObj.isPositional = true;
}
}
@@ -584,17 +598,6 @@ function dispatch( target, event, handlers, args ) {
}
}

function quickIs( elem, m ) {
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[6] || !elem[ m[6] ])
);
}


jQuery.removeEvent = document.removeEventListener ?
function( elem, type, handle ) {
if ( elem.removeEventListener ) {

0 comments on commit bb1081e

Please sign in to comment.
You can’t perform that action at this time.