- From: Sebastian Zartner <sebastianzartner@gmail.com>
- Date: Wed, 2 Jul 2014 14:10:19 +0200
- To: Sander Spies <sandermail@gmail.com>
- Cc: David Bruant <bruant.d@gmail.com>, www-dom@w3.org
- Message-ID: <CAERejNa+p+jSRicgXF-q_1YjgHP1iJ=RM6M7LehOPK2XMEOQ1g@mail.gmail.com>
On 2 July 2014 13:41, Sander Spies <sandermail@gmail.com> wrote: > Hi David, > > Thanks for answering. > > > On Wed, Jul 2, 2014 at 12:03 PM, David Bruant <bruant.d@gmail.com> wrote: > >> Hi, >> >> What is the use case that motivates this change? >> Is there a particular example that would significantly benefit from this >> change? >> >> > Imagine you want to change classes, add some attributes, add new DOM nodes > and remove several old ones, all at the same time. With 'innerSmartHTML' > you could see the new state of the DOM at once, it's basically right there > in front of you and you don't need to read through all the DOM > modifications to understand what is really happening. Also, your existing > event listeners are still there. > A concrete use case for this could be the options to expand and highlight changes in Firebug's HTML panel. Firebug allows to expand the structure within it's HTML panel and highlight the changed parts. For content inserted via innerHTML it can't distinguish whether only parts within the assigned HTML have changed and therefore collapses the whole tree. See also this thread on stackoverflow: http://stackoverflow.com/questions/24299555/firebug-collapsing-the-whole-tree Firebug uses a Mutation Observer for this purpose, which would be expected to only trigger for the real changes in this case instead of all children of an element being replaced by new ones. Furthermore I'd suggest another syntax for this: Make 'innerHTML' an object and add a function to it for assigning. The syntax would then look like this: innerHTML.set(htmlString, onlyApplyDifferences) where 'htmlString' is the string to be set containing the HTML content and 'methodForApplying' either 'onlyApplyDifferences' a boolean value specifying whether the string should be applied normally (replacing all inner HTML) or smartly by only applying the changes. For backwards compatibility innerHTML would have a setter, which applies the HTML the normal way, i.e. innerHTML = '<p>foo</p>' would still work like now. Sebastian
Received on Wednesday, 2 July 2014 12:11:06 UTC