W3C home > Mailing lists > Public > www-dom@w3.org > January to March 2002

cloneNode() and events

From: <M.Hompus@gac.nl>
Date: Wed, 20 Mar 2002 10:25:39 +0100
To: www-dom@w3.org
Message-ID: <OFA32D18EF.B8C6E8E5-ONC1256B82.0033B506@gac.nl>

I do a lot of j(ava)scripting with the DOM, now I've written some code that
makes a (prototype) object that is cloned several times. This object has
also an event attached. In Internet Explorer this event is available on
each node that was cloned, in Mozilla this isn't happening.

When I use the same code to attach an event to a node which is not cloned
it all just works fine. Because Mozilla normally is acting like it should,
following the DOM standard I looked what was written about cloneNode and
events. Surprisingly there is nothing said about event already on a node
which is cloned.

What should be the correct action? Should events be cloned? I hope it
should, and I think it has to be specified in the DOM(-core).

My code of the node:

// Create prototype image
var protoImg = doc.createElement('img');
protoImg.src = './images/zoom.gif';
protoImg.style.width = '16px';
protoImg.style.height = '16px';
protoImg.style.marginLeft = '2px';
protoImg.style.verticalAlign = 'middle';
protoImg.alt = protoImg.title = aProperties[1];
try {
     // Mozilla
     protoImg.addEventListener('click', FL_DrawZoom, false);
} catch(e) {
     // Internet Explorer
     protoImg.attachEvent('onclick', FL_DrawZoom);
}

The section of the DOM2-core about cloneNode():

cloneNode

Returns a duplicate of this node, i.e., serves as a generic copy
constructor for nodes. The duplicate node has no parent; (parentNode is
null.).
Cloning an Element copies all attributes and their values, including those
generated by the XML processor to represent defaulted attributes, but this
method does not copy any text it contains unless it is a deep clone, since
the text is contained in a child Text node. Cloning an Attribute directly,
as opposed to be cloned as part of an Element cloning operation, returns a
specified attribute (specified is true). Cloning any other type of node
simply returns a copy of this node.
Note that cloning an immutable subtree results in a mutable copy, but the
children of an EntityReference clone are readonly. In addition, clones of
unspecified Attr nodes are specified. And, cloning Document, DocumentType,
Entity, and Notation nodes is implementation dependent.

Parameters
     deep of type boolean

     If true, recursively clone the subtree under the specified node; if
false, clone only the node itself (and its attributes, if it is an
Element).

Return Value
     Node

     The duplicate node.


No Exceptions
Received on Wednesday, 20 March 2002 04:25:34 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Friday, 22 June 2012 06:13:55 GMT