Hi,

> But can anyone explain what my conceptual failure was here?

Elements can have at most *one* parent element. What you were
expecting would have resulted in an element having two parents, which
the tree-like structure of the DOM does not allow. This isn't a
Prototype thing, it goes at least back to the first formal DOM
specification (and probably farther):

"appendChild: Adds the node newChild to the end of the list of
children of this node. If the newChild is already in the tree, it is
first removed."[1]

Conveniently, though, there's cloneNode[2], which would have done
pretty much what you were expecting:

   $('bar').update(this.down('p').cloneNode());

Be careful if you clone a node that has an ID attribute, though; you
have to change the ID before adding it back to the tree (since IDs
*must* be unique).

[1] http://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#method-appendChild
[2] http://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#method-cloneNode

HTH,
--
T.J. Crowder
Independent Software Consultant
tj / crowder software / com
www.crowdersoftware.com


On Mar 3, 8:02 pm, Walter Lee Davis <[email protected]> wrote:
> I was trying to do a very simple image-swap effect:
>
> <div id="foo">
> <p><img ... /></p>
> </div>
>
> <div id="bar">
> <p><img ... /></p>
> </div>
>
> $('foo').observe('click',function(evt){
>         $('bar').update(this.down('p'));
>
> });
>
> I expected both #foo and #bar to contain the same image, but instead,  
> #foo was empty, and #bar contained the image originally in #foo.
>
> I resolve the problem by changing my method from copying the P to  
> simply making the two images have the same src attribute.
>
> But can anyone explain what my conceptual failure was here? Why did  
> update() seem to do what I would have expected the following  
> construction to do:
>
> $('bar').update(this.down('p').remove());
>
> ???
>
> Thanks in advance,
>
> Walter

-- 
You received this message because you are subscribed to the Google Groups 
"Prototype & script.aculo.us" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/prototype-scriptaculous?hl=en.

Reply via email to