function(selector, root) {
            var selectors = selector.split(','),
                length = selectors.length,
                i = 0,
                results = [],
                noDupResults = [],
                dupMatcher = {},
                query, resultsLn, cmp;

            for (; i < length; i++) {
                selector = Ext.String.trim(selectors[i]);
                query = this.parse(selector);
//                query = this.cache[selector];
//                if (!query) {
//                    this.cache[selector] = query = this.parse(selector);
//                }
                results = results.concat(query.execute(root));
            }

            // multiple selectors, potential to find duplicates
            // lets filter them out.
            if (length > 1) {
                resultsLn = results.length;
                for (i = 0; i < resultsLn; i++) {
                    cmp = results[i];
                    if (!dupMatcher[cmp.id]) {
                        noDupResults.push(cmp);
                        dupMatcher[cmp.id] = true;
                    }
                }
                results = noDupResults;
            }
            return results;
        }
function(selector, root) {
            var selectors = selector.split(','),
                length = selectors.length,
                i = 0,
                results = [],
                noDupResults = [],
                dupMatcher = {},
                query, resultsLn, cmp;

            for (; i < length; i++) {
                selector = Ext.String.trim(selectors[i]);
                query = this.parse(selector);
//                query = this.cache[selector];
//                if (!query) {
//                    this.cache[selector] = query = this.parse(selector);
//                }
                results = results.concat(query.execute(root));
            }

            // multiple selectors, potential to find duplicates
            // lets filter them out.
            if (length > 1) {
                resultsLn = results.length;
                for (i = 0; i < resultsLn; i++) {
                    cmp = results[i];
                    if (!dupMatcher[cmp.id]) {
                        noDupResults.push(cmp);
                        dupMatcher[cmp.id] = true;
                    }
                }
                results = noDupResults;
            }
            return results;
        }
function ( selector , root ) { var selectors = selector . split ( ',' ) , length = selectors . length , i = 0 , results = [ ] , noDupResults = [ ] , dupMatcher = { } , query , resultsLn , cmp ; for ( ; i < length ; i ++ ) { selector = Ext . String . trim ( selectors [ i ] ) ; query = this . parse ( selector ) ; //                query = this.cache[selector]; //                if (!query) { //                    this.cache[selector] = query = this.parse(selector); //                } results = results . concat ( query . execute ( root ) ) ; } // multiple selectors, potential to find duplicates // lets filter them out. if ( length > 1 ) { resultsLn = results . length ; for ( i = 0 ; i < resultsLn ; i ++ ) { cmp = results [ i ] ; if ( ! dupMatcher [ cmp . id ] ) { noDupResults . push ( cmp ) ; dupMatcher [ cmp . id ] = true ; } } results = noDupResults ; } return results ; }
Returns an array of matched Components from within the passed root object.

This method filters returned Components in a similar way to how CSS selector based DOM
queries work using a textual selector string.

See class summary for details.

@param {String} selector The selector string to filter returned Components
@param {Ext.Container} root The Container within which to perform the query.
If omitted, all Components within the document are included in the search.

This parameter may also be an array of Components to filter according to the selector.
@return {Ext.Component[]} The matched Components.

@member Ext.ComponentQuery
Returns an array of matched Components from within the passed root object .