Bug Tracker

Ticket #1960: filterByName2.diff

File filterByName2.diff, 1.8 kB (added by flesler, 5 months ago)

Somewhat shorter, skips not's

  • src/selector.js

     
    331331                r = jQuery.classFilter(r, m[2], not); 
    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                if( !not && m[2] == 'name' && type == '=' )//special case, filter by exact name 
     337                    r = jQuery.grep( document.getElementsByName(m[5]), function(elem){ 
     338                        return jQuery.inArray( elem, r ) != -1;  
     339                    }); 
     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 
    354360            } else if ( m[1] == ":" && m[2] == "nth-child" ) {