Bug Tracker

Ticket #4538: pushstack-selector.patch

File pushstack-selector.patch, 2.3 KB (added by trixi, 13 years ago)
  • core.js

     
    141141
    142142        // Take an array of elements and push it onto the stack
    143143        // (returning the new matched element set)
    144         pushStack: function( elems, name, selector ) {
    145                 // Build a new jQuery matched element set
    146                 var ret = jQuery( elems || null );
    147 
    148                 // Add the old object onto the stack (as a reference)
    149                 ret.prevObject = this;
    150 
    151                 ret.context = this.context;
    152 
    153                 if ( name === "find" ) {
    154                         ret.selector = this.selector + (this.selector ? " " : "") + selector;
    155                 } else if ( name ) {
    156                         ret.selector = this.selector + "." + name + "(" + selector + ")";
     144        pushStack: (function(){
     145                var concatChar = {
     146                        find: "",
     147                        children: "> ",
     148                        next: "+ ",
     149                        siblings: '~ '
     150                };
     151                function concatSelector(first, last, concatName){
     152                        return (concatChar[concatName] !== undefined) ? first + (first ? " " : "")+ concatChar[concatName] + last : first + "." + concatName + "(" + last + ")";
    157153                }
     154               
     155                function concatMultiSelector( contextSelector, appendSelector, concatName ){
     156                        contextSelector = contextSelector.split(',');
     157                        appendSelector = appendSelector.split(',');
     158                        var ret = [];
     159                        for(var i = 0; i < contextSelector.length; i++){
     160                                for(var j = 0; j < appendSelector.length; j++){
     161                                        ret.push( concatSelector( jQuery.trim( contextSelector[i] ), jQuery.trim( appendSelector[j] ), concatName ) );
     162                                }
     163                        }       
     164                        return ret.join(', ');
     165                }
     166               
     167                return function( elems, name, selector ) {
     168                        // Build a new jQuery matched element set
     169                        var ret = jQuery( elems || null );
     170       
     171                        // Add the old object onto the stack (as a reference)
     172                        ret.prevObject = this;
     173       
     174                        ret.context = this.context;
     175                       
     176                        ret.selector = (this.selector.indexOf(',') !== -1 || selector.indexOf(',') !== -1) ? concatMultiSelector( this.selector, selector, name ) : concatSelector( this.selector, selector, name );
     177                       
     178                        // Return the newly-formed element set
     179                        return ret;
     180                }
     181        })(),
    158182
    159                 // Return the newly-formed element set
    160                 return ret;
    161         },
    162 
    163183        // Force the current matched set of elements to become
    164184        // the specified array of elements (destroying the stack in the process)
    165185        // You should use pushStack() in order to do this, but maintain the stack