Bug Tracker

Changeset 5343

Show
Ignore:
Timestamp:
04/28/08 14:11:35 (4 months ago)
Author:
joern.zaefferer
Message:

jquery core: fix for #1960, delegating to document.getElementsByName for [name=...] selectors (not in combination with :not)

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/jquery/src/selector.js

    r4537 r5343  
    332332 
    333333            else if ( m[1] == "[" ) { 
    334                 var tmp = [], type = m[3]; 
     334                var type = m[3]; 
    335335                 
    336                 for ( var i = 0, rl = r.length; i < rl; i++ ) { 
    337                     var a = r[i], z = a[ jQuery.props[m[2]] || m[2] ]; 
    338                      
    339                     if ( z == null || /href|src|selected/.test(m[2]) ) 
    340                         z = jQuery.attr(a,m[2]) || ''; 
    341  
    342                     if ( (type == "" && !!z || 
    343                          type == "=" && z == m[5] || 
    344                          type == "!=" && z != m[5] || 
    345                          type == "^=" && z && !z.indexOf(m[5]) || 
    346                          type == "$=" && z.substr(z.length - m[5].length) == m[5] || 
    347                          (type == "*=" || type == "~=") && z.indexOf(m[5]) >= 0) ^ not ) 
    348                             tmp.push( a ); 
     336                // special case, filter by exact name 
     337                if ( !not && m[2] == 'name' && type == '=' ) 
     338                    r = jQuery.grep( document.getElementsByName(m[5]), function(elem){ 
     339                        return jQuery.inArray( elem, r ) != -1;  
     340                    }); 
     341                else { 
     342                    for ( var i = 0, rl = r.length, tmp = []; i < rl; i++ ) { 
     343                        var a = r[i], z = a[ jQuery.props[m[2]] || m[2] ]; 
     344                         
     345                        if ( z == null || /href|src|selected/.test(m[2]) ) 
     346                            z = jQuery.attr(a,m[2]) || ''; 
     347     
     348                        if ( (type == "" && !!z || 
     349                             type == "=" && z == m[5] || 
     350                             type == "!=" && z != m[5] || 
     351                             type == "^=" && z && !z.indexOf(m[5]) || 
     352                             type == "$=" && z.substr(z.length - m[5].length) == m[5] || 
     353                             (type == "*=" || type == "~=") && z.indexOf(m[5]) >= 0) ^ not ) 
     354                                tmp.push( a ); 
     355                    }                    
     356                    r = tmp; 
    349357                } 
    350                  
    351                 r = tmp; 
    352358 
    353359            // We can get a speed boost by handling nth-child here