code: function( elem, context, xml ) {
  			// We can't set arbitrary data on XML nodes, so they don't benefit from dir caching
  			if ( !xml ) {
  				var cache,
  					dirkey = dirruns + " " + doneName + " ",
  					cachedkey = dirkey + cachedruns;
  				while ( (elem = elem[ dir ]) ) {
  					if ( checkNonElements || elem.nodeType === 1 ) {
  						if ( (cache = elem[ expando ]) === cachedkey ) {
  							return elem.sizset;
  						} else if ( typeof cache === "string" && cache.indexOf(dirkey) === 0 ) {
  							if ( elem.sizset ) {
  								return elem;
  							}
  						} else {
  							elem[ expando ] = cachedkey;
  							if ( matcher( elem, context, xml ) ) {
  								elem.sizset = true;
  								return elem;
  							}
  							elem.sizset = false;
  						}
  					}
  				}
  			} else {
  				while ( (elem = elem[ dir ]) ) {
  					if ( checkNonElements || elem.nodeType === 1 ) {
  						if ( matcher( elem, context, xml ) ) {
  							return elem;
  						}
  					}
  				}
  			}
  		}
docs: Check against all ancestor/preceding elements