X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Ftraversing.js;h=a467e7c9eaa616831c07ae19b238e64ad782247f;hb=ddb86f8d5bd1bd21b2beeeea55baf505b47dfed5;hp=0e379c72b0591092254182cc5ca07a6ec0745b84;hpb=9b20eb4c85edb156d365e7e376faeef5c741e8fd;p=jquery.git diff --git a/src/traversing.js b/src/traversing.js index 0e379c7..a467e7c 100644 --- a/src/traversing.js +++ b/src/traversing.js @@ -10,8 +10,11 @@ var winnow = function( elements, qualifier, keep ) { } else if( typeof qualifier === "string" ) { var filtered = jQuery.grep(elements, function(elem) { return elem.nodeType === 1 }); - if(isSimple.test( qualifier )) return jQuery.multiFilter(qualifier, filtered, !keep); - else qualifier = jQuery.multiFilter( qualifier, elements ); + if(isSimple.test( qualifier )) { + return jQuery.filter(qualifier, filtered, !keep); + } else { + qualifier = jQuery.filter( qualifier, elements ); + } } return jQuery.grep(elements, function(elem, i) { @@ -52,29 +55,33 @@ jQuery.fn.extend({ }, closest: function( selector, context ) { - var pos = jQuery.expr.match.POS.test( selector ) ? jQuery(selector) : null, - closer = 0; + var pos = jQuery.expr.match.POS.test( selector ) ? + jQuery( selector, context || this.context ) : null; return this.map(function(){ - var cur = this; + var cur = this, closer = 0; while ( cur && cur.ownerDocument && cur !== context ) { if ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selector) ) { - jQuery.data(cur, "closest", closer); + jQuery.lastCloser = closer; return cur; } cur = cur.parentNode; closer++; } + jQuery.lastCloser = -1; + return null; }); }, - add: function( selector ) { - return this.pushStack( jQuery.unique( jQuery.merge( - this.get(), - typeof selector === "string" ? - jQuery( selector ) : - jQuery.makeArray( selector ) - ))); + add: function( selector, context ) { + var set = typeof selector === "string" ? + jQuery( selector, context || this.context ) : + jQuery.makeArray( selector ), + all = jQuery.merge( this.get(), set ); + + return this.pushStack( set[0] && (set[0].setInterval || set[0].nodeType === 9 || (set[0].parentNode && set[0].parentNode.nodeType !== 11)) ? + jQuery.unique( all ) : + all ); }, eq: function( i ) { @@ -125,9 +132,62 @@ jQuery.each({ jQuery.fn[ name ] = function( selector ) { var ret = jQuery.map( this, fn ); - if ( selector && typeof selector == "string" ) - ret = jQuery.multiFilter( selector, ret ); + if ( selector && typeof selector === "string" ) { + ret = jQuery.filter( selector, ret ); + } + + ret = this.length > 1 ? jQuery.unique( ret ) : ret; - return this.pushStack( jQuery.unique( ret ), name, selector ); + if ( name === "parents" && this.length > 1 ) { + ret = ret.reverse(); + } + + return this.pushStack( ret, name, selector ); }; }); + +jQuery.extend({ + filter: function( expr, elems, not ) { + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return jQuery.find.matches(expr, elems); + }, + + dir: function( elem, dir ) { + var matched = [], cur = elem[dir]; + while ( cur && cur.nodeType !== 9 ) { + if ( cur.nodeType === 1 ) { + matched.push( cur ); + } + cur = cur[dir]; + } + return matched; + }, + + nth: function( cur, result, dir, elem ) { + result = result || 1; + var num = 0; + + for ( ; cur; cur = cur[dir] ) { + if ( cur.nodeType === 1 && ++num === result ) { + break; + } + } + + return cur; + }, + + sibling: function( n, elem ) { + var r = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + r.push( n ); + } + } + + return r; + } +});