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
-~----------~----~----~----~------~----~------~--~---

Reply via email to