- // Ignore postFinder because it can't coexist with seed\r
- i = preFilter && matcherOut.length;\r
- while ( i-- ) {\r
- if ( (elem = matcherOut[i]) ) {\r
- seed[ preMap[i] ] = !(results[ preMap[i] ] = elem);\r
+ if ( postFinder || preFilter ) {\r
+ if ( postFinder ) {\r
+ // Get the final matcherOut by condensing this intermediate into postFinder contexts\r
+ temp = [];\r
+ i = matcherOut.length;\r
+ while ( i-- ) {\r
+ if ( (elem = matcherOut[i]) ) {\r
+ // Restore matcherIn since elem is not yet a final match\r
+ temp.push( (matcherIn[i] = elem) );\r
+ }\r
+ }\r
+ postFinder( null, (matcherOut = []), temp, xml );\r
+ }\r
+\r
+ // Move matched elements from seed to results to keep them synchronized\r
+ i = matcherOut.length;\r
+ while ( i-- ) {\r
+ if ( (elem = matcherOut[i]) &&\r
+ (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {\r
+\r
+ seed[temp] = !(results[temp] = elem);\r
+ }\r