X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fselector.js;h=f88f7e9cb077f065bbfb8e5cdac49d6d119e5502;hb=17b1e407d101c5c7f91db633df3a80cd9b4466ae;hp=2040728cedfaa34e544c381589f97d3cef0ebd15;hpb=5da2e98cb39f30e940962fe0bf2d23356d9f90a8;p=jquery.git diff --git a/src/selector.js b/src/selector.js index 2040728..f88f7e9 100644 --- a/src/selector.js +++ b/src/selector.js @@ -114,12 +114,13 @@ jQuery.extend({ t = jQuery.trim(t); - var foundToken = false; + var foundToken = false, // An attempt at speeding up child selectors that // point to a specific element tag - var re = quickChild; - var m = re.exec(t); + re = quickChild, + + m = re.exec(t); if ( m ) { nodeName = m[1].toUpperCase(); @@ -331,24 +332,30 @@ jQuery.extend({ r = jQuery.classFilter(r, m[2], not); else if ( m[1] == "[" ) { - var tmp = [], type = m[3]; + var 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 ); + // special case, filter by exact name + if ( !not && m[2] == 'name' && type == '=' ) + r = jQuery.grep( document.getElementsByName(m[5]), function(elem){ + return jQuery.inArray( elem, r ) != -1; + }); + else { + for ( var i = 0, rl = r.length, tmp = []; 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; } - - r = tmp; // We can get a speed boost by handling nth-child here } else if ( m[1] == ":" && m[2] == "nth-child" ) { @@ -410,8 +417,8 @@ jQuery.extend({ }, dir: function( elem, dir ){ - var matched = []; - var cur = elem[dir]; + var matched = [], + cur = elem[dir]; while ( cur && cur != document ) { if ( cur.nodeType == 1 ) matched.push( cur ); @@ -443,3 +450,4 @@ jQuery.extend({ } }); +