- From: Ray Whitmer <ray@imall.com>
- Date: Wed, 09 Sep 1998 10:11:10 -0600
- To: www-dom@w3.org
Kirkpatrick, Alfie wrote:
> 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):
I agree.
> 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?
I do not think that the appendChild method of element should automatically
clone.
> 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.
Probably.
> 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.
I strongly disagree. This is far worse than simply adding transferNode.
cloneNode should always clone the node. The type of complex behavior you
describe should never be a part of cloneNode, i.e. sometimes it clones and
sometimes it returns the original. If you want transferNode, then call it
that.
> This raises a question. What happens to ownerDocument and parentNode
> after removeChild?
ownerDocument is a read-only attribute that always points to the document that
created it (or perhaps in the future, that it was transferred to).
When a child is removed from the parent, the parentNode attribute becomes null.
Was this what you were asking?
Ray Whitmer
ray@imall.com
Received on Wednesday, 9 September 1998 12:11:05 UTC