Devon, some people like to remove elements and have the option of  
adding some or all of them back into the DOM at a later time.

DBJDBJ, this is just FYI since you already retracted your suggestion  
to add a .detach() method, but jQuery 1.4a already has a .detach()  
method. It removes elements from the DOM without removing their events  
or data.


--Karl


On Dec 15, 2009, at 7:33 AM, Devon Govett wrote:

> @John I would like to ask the same thing DBJDBJ did.  Why would you
> want to find the index of an element that no longer exists?  This just
> seems unintuitive.  You shouldn't be able to find the index of
> something not in the document.  The two sets of elements did refer to
> the same thing, but no they don't because you removed the elements.
> This makes sense to me.  As far as I know, no matter how you remove
> elements they are not part of the document any more.  Isn't that the
> point of removing them?
>
> Devon
>
> On Dec 14, 11:48 pm, John Resig <jere...@gmail.com> wrote:
>> A major problem with your technique is that the original elements are
>> simply no longer part of the document.
>>
>> For example:
>>
>> var someElems = $("div");
>> // length == 10
>>
>> var removed = $("div.foo").remove();
>> // length == 5
>>
>> someElems.index( removed )
>> // -1 (the elements you just removed aren't found!)
>>
>> This creates a problem: You now have two sets of elements that sort  
>> of
>> refer to the same thing but actually aren't the same.
>>
>> --John
>>
>>
>>
>> On Mon, Dec 14, 2009 at 11:35 PM, Devon Govett  
>> <devongov...@gmail.com> wrote:
>>> I did some performance testing with the following code, and found it
>>> to be much slower than the cloneNode method, but still often twice  
>>> as
>>> fast as the current method.
>>
>>> jQuery.fn.removeAll = function() {
>>>        this.each(function() {
>>>                var nextSibling = this.nextSibling;
>>>                var parent = this.parentNode;
>>
>>>                parent.removeChild(this);
>>>                while (this.firstChild) {
>>>                        this.removeChild(this.firstChild);
>>>                }
>>>                if(nextSibling)
>>>                        parent.insertBefore(this, nextSibling)
>>>                else
>>>                        parent.appendChild(this);
>>>        });
>>> };
>>
>>> What are the problems with the cloneNode method?
>>
>>> Devon
>>
>>> On Dec 13, 5:36 pm, Devon Govett <devongov...@gmail.com> wrote:
>>>> Yeah I tried that too, and it was slightly slower in most browsers
>>>> than cloneNode.  The other issue with this, is that if the user  
>>>> has a
>>>> slow computer, or the removal is taking a really long time, layout
>>>> problems may occur since there is no element in the DOM during the
>>>> emptying.  The cloneNode method has the advantage that during the
>>>> emptying process nothing is removed from the screen and so things
>>>> don't look weird.  I know this is an edge case, but it is  
>>>> something to
>>>> consider.
>>
>>>> Devon
>>
>>>> On Dec 13, 10:46 am, John Resig <jere...@gmail.com> wrote:
>>
>>>>> Actually, now that you bring this up, it would make a lot of  
>>>>> sense to
>>>>> just remove the element from the DOM first and /then/ go through  
>>>>> and
>>>>> clean up the child nodes, and finally re-inject the element  
>>>>> again. I'm
>>>>> hesitant to do a cloneNode because of the inherent problems that  
>>>>> exist
>>>>> in Internet Explorer. I'll see if I have some time to do some perf
>>>>> testing on this later today.
>>
>>>>> --John
>>
>>>>> On Sun, Dec 13, 2009 at 8:19 AM, Devon Govett  
>>>>> <devongov...@gmail.com> wrote:
>>>>>> Hi all,
>>
>>>>>> I've just blogged about a technique that I used to make  
>>>>>> jQuery.empty
>>>>>> over 10x faster in some cases.  Basically, rather than  
>>>>>> individually
>>>>>> removing each child element from the DOM which causes the  
>>>>>> browser to
>>>>>> reflow after each one, I use a shallow cloneNode to do the job  
>>>>>> then
>>>>>> copying events back over.  Check out the blog post for more  
>>>>>> details:
>>>>>> http://devongovett.wordpress.com/2009/12/12/how-to-make-jquery-empty- 
>>>>>> ....
>>>>>> I've included some charts comparing the performance of jQuery  
>>>>>> 1.4's
>>>>>> empty and html("") functions, as well as the function I've  
>>>>>> written,
>>>>>> and the cloneNode method out performs all other methods by a
>>>>>> significant amount in all browsers.
>>
>>>>>> Thanks for jQuery!
>>>>>> Devon
>>
>>>>>> --
>>
>>>>>> You received this message because you are subscribed to the  
>>>>>> Google Groups "jQuery Development" group.
>>>>>> To post to this group, send email to jquery-...@googlegroups.com.
>>>>>> To unsubscribe from this group, send email to 
>>>>>> jquery-dev+unsubscr...@googlegroups.com 
>>>>>> .
>>>>>> For more options, visit this group 
>>>>>> athttp://groups.google.com/group/jquery-dev?hl=en 
>>>>>> .
>>
>>> --
>>
>>> You received this message because you are subscribed to the Google  
>>> Groups "jQuery Development" group.
>>> To post to this group, send email to jquery-...@googlegroups.com.
>>> To unsubscribe from this group, send email to 
>>> jquery-dev+unsubscr...@googlegroups.com 
>>> .
>>> For more options, visit this group 
>>> athttp://groups.google.com/group/jquery-dev?hl=en 
>>> .
>
> --
>
> You received this message because you are subscribed to the Google  
> Groups "jQuery Development" group.
> To post to this group, send email to jquery-...@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 
> .
>
>

--

You received this message because you are subscribed to the Google Groups 
"jQuery Development" group.
To post to this group, send email to jquery-...@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