Not really a fan of this - doesn't make much sense within the context of jQuery.
For example, if you did: $("div").filter(".foo").garbage() There would still be a reference to all the divs contained in the original result set. The only way to truly "clean up" an element would be to either A) Remove every instance of the element from every jQuery set or B) just remove all references to the set in question, if you want it to be collected by the browser itself. --John On Tue, Aug 18, 2009 at 12:09 PM, Andrea Giammarchi<andrea.giammar...@gmail.com> wrote: > John, I have created and tested a patch. > > Please have a look when you have a second. It does not break anything, the > name could be obviously changed if you want ( something like > updateCollection or whatever ) > > It stays into manipulation file > > jQuery.fn.extend({ > > // updates precedent search removing nodes not in context anymore > garbage:(function(splice){ > return function() { > var length = this.length, > remove = [] > ; > while( length ){ > if( !jQuery.contains( this.context, this[--length] ) ) { > remove.push( splice.call( this, length, 1 ) ); > } > }; > remove.each = this.each; > this.remove.call(remove, false, false); > return this; > } > })( Array.prototype.splice ), > > text: function( text ) { > .... > > The only thing to avoid to mess up stuff is that it needs contains exposures > from selector file > > // EXPOSE > jQuery.find = Sizzle; > jQuery.expr = Sizzle.selectors; > jQuery.expr[":"] = jQuery.expr.filters; > jQuery.contains = contains; > > Please, let me know what you think. > > Cheers > > On Tue, Aug 18, 2009 at 4:31 PM, Andrea Giammarchi > <andrea.giammar...@gmail.com> wrote: >> >> Sorry, maybe this one will be better: >> >> garbage:(function(splice){ >> return function(){ >> var length = this.length; >> while(length){ >> if(!contains(this.context, this[--length])) >> jQuery.remove.call(splice.call(this, length, 1)); >> }; >> return this; >> }; >> })(Array.prototype.splice), >> >> Regards >> >> On Tue, Aug 18, 2009 at 4:21 PM, Andrea Giammarchi >> <andrea.giammar...@gmail.com> wrote: >>> >>> What a bout a garbage collector prototype method? Is there any plugin >>> like this? >>> >>> garbage:(function(splice){ >>> return function(){ >>> var length = this.length; >>> while(length){ >>> if(!contains(this.context, this[--length])) >>> splice.call(this, length, 1); >>> }; >>> return this; >>> }; >>> })(Array.prototype.splice), >>> >>> The problem is that to use the jQuery contains function it requires to be >>> inside the library since if I am not wrong contains is not exposed. >>> >>> What do you think? >>> >>> On Tue, Aug 18, 2009 at 4:00 PM, John Resig <jere...@gmail.com> wrote: >>>> >>>>> Not really, right? You can still modify and re-place nodes that have >>>>> been removed from the dom, but not on nodes that have been destroyed. >>>>> >>>>> <div id="bar"><p>hi</p><p>there</p></div> >>>>> >>>>> var ps = $("#bar p").remove(); >>>>> $("#bar").html("<p>hmm</p>"); >>>>> ps.appendTo("#bar") >>>>> >>>>> or some such. >>>> >>>> Removed from the DOM via an innerHTML or removed from the DOM via a >>>> removeChild - the result is the same either way. A reference to the DOM >>>> element should be maintained so that further operations can be performed. >>>> >>>> --John >>>> >>>> >>> >> > > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "jQuery Development" group. To post to this group, send email to jquery-dev@googlegroups.com To unsubscribe from this group, send email to jquery-dev+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/jquery-dev?hl=en -~----------~----~----~----~------~----~------~--~---