Re: Mutation events replacement

On Fri, Jul 1, 2011 at 3:25 PM, David Flanagan <dflanagan@mozilla.com> wrote:
> On 7/1/11 3:06 PM, Olli Pettay wrote:
>>
>> On 07/02/2011 12:59 AM, David Flanagan wrote:
>>>
>>> But, and I think this is an interesting but, what happens if a node is
>>> removed from the document, has its attributes or data or children
>>> changed and is then re-inserted into the document? If the node has no
>>> parent when it is changed, no mutation events will be generated, will
>>> they?
>>
>> Sure they are. If the node has listeners, they will get called.
>>
> I'm assuming the listeners are further up the tree.
>
> To give a concrete example, to a mutation event listener (under Rafael's
> proposal, but maybe yours, too?) on the document, these two sequences of
> operations will be indistinguishable:
>
> // Generates one event for removing the title text from the <head> and
> another for
> // inserting it into the <body>.  (Assume
> document.head.firstChild.firstChild is the text node inside
> // the <title> tag.
> document.body.appendChild(document.head.firstChild.firstChild);
>
> // Here we generate the same sequence of mutation events
> var titletext = document.head.firstChild.firstChild.
> titletext.parentNode.removeChild(titletext);  // Generates a remove event
> titletext.data = "foobar";                               // Generates a
> mutation event no one sees
> document.body.appendChild(titletext);         // Generates an insert event
>
> I claim that it is useful to be able to distinguish these two cases with
> some sort of move event.  If moves are treated as remove/insert pairs, then
> listeners have to assume that arbitrary changes could have taken place
> between the two.

If you want to discover mutations to nodes while outside the tree,
then having a single subtree observer isn't sufficient. You'll need an
attribute observer registered on all elements reachable from the root.
I believe this is the same with both proposals.

>
>    David
>
>
>

Received on Friday, 1 July 2011 22:48:23 UTC