rem: r = jQuery.filter(m[3], r, true).r; 
add:  if ( /^.[^:#\[\.]*$/.test(m[3]) ) r = jQuery.filter(m[3], r, true).r; else r = jQuery.removeFromArray(jQuery.multiFilter(m[3], r), r); 
context: 	filter: function(t,r,not) {		var last;		// Look for common filter expressions		while ( t && t != last ) {			last = t;			var p = jQuery.parse, m;			for ( var i = 0; p[i]; i++ ) {				m = p[i].exec( t );				if ( m ) {					// Remove what we just matched					t = t.substring( m[0].length );					m[2] = m[2].replace(/\\/g, "");					break;				}			}			if ( !m )				break;			// :not() is a special case that can be optimized by			// keeping it out of the expression list			if ( m[1] == ":" && m[2] == "not" )				r = jQuery.filter(m[3], r, true).r;			// We can get a big speed boost by filtering by class here			else if ( m[1] == "." )				r = jQuery.classFilter(r, m[2], not);			else if ( m[1] == "[" ) {				var tmp = [], type = m[3];								for ( var i = 0, rl = r.length; i < rl; i++ ) {					var a = r[i], z = a[ jQuery.props[m[2]] || m[2] ];										if ( z == null || /href|src|selected/.test(m[2]) )						z = jQuery.attr(a,m[2]) || '';					if ( (type == "" && !!z ||						 type == "=" && z == m[5] ||						 type == "!=" && z != m[5] ||						 type == "^=" && z && !z.indexOf(m[5]) ||						 type == "$=" && z.substr(z.length - m[5].length) == m[5] ||						 (type == "*=" || type == "~=") && z.indexOf(m[5]) >= 0) ^ not )							tmp.push( a );				}								r = tmp;			// We can get a speed boost by handling nth-child here			} else if ( m[1] == ":" && m[2] == "nth-child" ) {				var merge = {}, tmp = [],					// parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'					test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(						m[3] == "even" && "2n" || m[3] == "odd" && "2n+1" ||						!/\D/.test(m[3]) && "0n+" + m[3] || m[3]),					// calculate the numbers (first)n+(last) including if they are negative					first = (test[1] + (test[2] || 1)) - 0, last = test[3] - 0; 				// loop through all the elements left in the jQuery object				for ( var i = 0, rl = r.length; i < rl; i++ ) {					var node = r[i], parentNode = node.parentNode, id = jQuery.data(parentNode);					if ( !merge[id] ) {						var c = 1;						for ( var n = parentNode.firstChild; n; n = n.nextSibling )							if ( n.nodeType == 1 )								n.nodeIndex = c++;						merge[id] = true;					}					var add = false;					if ( first == 0 ) {						if ( node.nodeIndex == last )							add = true;					} else if ( (node.nodeIndex - last) % first == 0 && (node.nodeIndex - last) / first >= 0 )						add = true;					if ( add ^ not )						tmp.push( node );				}				r = tmp;			// Otherwise, find the expression to execute			} else {				var f = jQuery.expr[m[1]];				if ( typeof f != "string" )					f = jQuery.expr[m[1]][m[2]];				// Build a custom macro to enclose it				f = eval("false||function(a,i){return " + f + "}");				// Execute it against the current filter				r = jQuery.grep( r, f, not );			}		}		// Return an array of filtered elements (r)		// and the modified expression string (t)		return { r: r, t: t };	},
meta: 3217	/local1/tlutelli/issta_data/temp/all_js/javascript/2007_temp/2007/3217/da33a981c6fb18a195377d55a6d243e2de887f45/selector.js/clean/src/selector.js