Well, if you're arguing that you might as well argue that .remove() should return an empty set - since the elements are no longer in the document.
--John On Tue, Aug 18, 2009 at 10:30 AM, Andrea Giammarchi < andrea.giammar...@gmail.com> wrote: > Actually, me and phiggins were looking at TaskSpeed bench and he spotted an > error in my Pure DOM which was basically the reason we realized every single > test there was wrong. > > let's do an example. My document has 3 divs: > > '<div><div></div></div><div></div>' > > one is nested ... now I do this: > > $("div").html("leak?").length; // which is 3 > > I am not sure if all libraries are managing the case in the same way but I > would not leave that div wrapped in that variable. > > If jQuery object related search is saved, it could be useful to re-search > it after each operation otherwise problems like this will be truly common > and leaks more probable than pure DOM manipulation. > > That test for example is now: > > var div = document.getElementsByTagName("div"), i = 0; > while(div[i]) > div[i++].innerHTML = "leak?"; > return i; > > because getElementsByTagName is live and I do not want to trap anything. > > Makes sense? > > > > > On Tue, Aug 18, 2009 at 1:40 PM, John Resig <jere...@gmail.com> wrote: > >> Well, you could just manipulate this[0], this[1], etc. directly - but it's >> strongly preferred that you return the new result with pushStack (as you've >> done) since that conforms with the typical way of constructing jQuery >> methods and plugins. >> >> --John >> >> >> >> On Mon, Aug 17, 2009 at 3:46 PM, jeanph01 <jeanp...@gmail.com> wrote: >> >>> >>> Hi! >>> >>> I'm creating a jquery plugin that alter an object to remove duplicates >>> in it. My problem is that a variable that access the old selector >>> result does not contain the same elements that it would have contained >>> if it would have been executed after the duplicates removal. >>> To illustrate : >>> >>> var v = $('div); // 150 objects >>> v.removeDuplicate(); // remove 10 duplicates >>> // here v still point to 150 objects >>> >>> >>> >>> Here is my plugin : >>> >>> jQuery.fn.__sort = function() { >>> return this.pushStack([].sort.apply(this, arguments), []); >>> }; >>> >>> jQuery.fn.sort = function(func) { >>> function internalSort(a,b){ >>> var compA = $(a).text(); >>> var compB = $(b).text(); >>> return (compA <> compB) ? 1 : 0; >>> } >>> if (!$.isFunction(func)) { >>> func = internalSort; >>> } >>> return this.__sort(func); >>> }; >>> >>> jQuery.fn.removeDuplicate = function() { >>> var that = $(this).sort(); >>> >>> $(this).each(function() { >>> var pos = that.index($(this)); >>> var next = that.eq(pos+1); >>> var eq = (next.text() === $(this).text()); >>> >>> if (eq) { next.remove();} >>> }); >>> >>> // enable chaining, updating selector >>> return $($(this).selector); >>> }; >>> >>> >>> The only solution I found is to return $(this) with an updated >>> selector. But I would have had to remember to update the content of my >>> variable before calling the plugin. >>> ex: >>> v = v.removeDuplicates(); >>> >>> Can I update $(this) from within removeDuplicate() ?? >>> >>> Thank you >>> >>> note: I posted this on the jQuery Plugins discussion put it seems >>> dead, or full of spam. >>> >>> >> >> >> > > > > --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---