- From: Kirkpatrick, Alfie <akirkpatrick@ims-global.com>
- Date: Wed, 9 Sep 1998 10:40:29 +0100
- To: www-dom@w3.org, Don Park <donpark@quake.net>
- Message-Id: <199809090946.FAA17292@www10.w3.org>
Don,
I'm not sure I understand this debate about cloning or transferring.
As I see it, the current spec doesn't say anything about transferring
nodes without cloning, so presumably it can be left to implementations.
The reason I wanted a targetDoc on cloneNode is so that we can
mix implementations. So if I do an appendChild from one implementation
to another, it can use cloneNode to get a clean copy in its own
implementation. I now see that it can also be used to transfer nodes
between documents too. For example (in pseudo code):
Node Element::appendChild(Node newChild)
{
// Check implementation
NodeInternal customNode=newChild.QueryInterface(INodeInternal);
if ( (customNode == NULL) || (newChild.ownerDocument != ownerDocument) )
{
// Not my implementation/document
customNode=newChild.cloneNode(TRUE, ownerDocument);
}
// Add to my children
m_children.push_back(customNode);
// Here's where we use the custom interface
customNode.parentNode=this;
}
Does this make any sense at all in Java?
Without a lot more work (ie. Level 2), I don't think we can get a
transferNode
which works between implementations/documents. However, if cloneNode is
given a targetDoc parameter, implementations can decide whether to clone
or not, and have a clear mechanism for doing so.
A performance boost might be to say that if the newChild is the same
implementation, has a different ownerDocument but doesn't have a parent
(perhaps after a removeChild), the custom interface could be used to modify
the ownerDocument and the parentNode, and thus avoid cloning.
This raises a question. What happens to ownerDocument and parentNode
after removeChild?
Alfie.
> ----------
> From: Don Park
> Sent: 09 September 1998 09:59
> To: www-dom@w3.org
> Subject: Re: Should Document.cloneNode() work in Level 1?
>
> Alfie,
>
> >The problem with transferNode below is that it assumes that
> >the destination node can change the ownerDocument for the
> >node, which currently isn't possible between implementations.
>
>
> Yeah, I realized my forgetfulness right after posting it. This basically
> forces transferNode implementation to always move by copying the content.
>
> However, your suggestion also forces cloning. The question is, are there
> any way to do this without cloning? Just change the definition of
> insertChild/appendChild?
>
> Don
>
>
Received on Wednesday, 9 September 1998 05:46:10 UTC