- From: Charles Pritchard <chuck@jumis.com>
- Date: Sat, 01 Oct 2011 13:54:07 -0700
- To: Sean Hogan <shogun70@westnet.com.au>
- CC: Dominic Cooney <dominicc@chromium.org>, www-dom@w3.org
On 10/1/11 6:48 AM, Sean Hogan wrote:
> On 1/10/11 12:15 PM, Charles Pritchard wrote:
>
>> They would still include their existing code path, but use the new
>> method in the polyfill school of programming.
>>
>> Having tried to push this Element.create concept for awhile, I've
>> change my approach: I'd prefer to overload the JSON object.
>
> You'd have to talk to the Ecmascript designers about the JSON object.
Yeah, I suppose this would violate the DOM boundary setup for Web
Workers as well.
I'm having a difficult time of this.
The concept has been illustrated in an SVG proposal for some time:
http://www.w3.org/Graphics/SVG/WG/wiki/Simple_SVG_API
That proposal only examines possible uses on SVGElement.
SVG documents use attributes quite a bit, where HTML more often uses CSS.
>> var myDiv = JSON.toNode({div: 'Hello World'});
>> myDiv.outerHTML == '<div>Hello World</div>';
>>
>
> what would the following result in?
>
> var myFrag1 = JSON.toNode({b: "Hello", i: "World"});
>
> var myFrag2 = JSON.toNode({b: "Hello", b: "World"});
>
myFrag1.outerHTML == '<b>Hello</b><i>World</i>'; // could be <i> then
<b> as well.
myFrag2.outerHTML == '<b>World</b>';
>
> how would I create equivalents of the following?
>
> <div>Hello <b>World</b>!</div>
{div: ['Hello', {b: 'World'}, '!']};
>
> <div class="greeting">Hello <b class="target">World</b>!</div>
>
JSON.toNode({div: ['Hello', {b: 'World'}, '!']}).className = 'greeting';
No quick route to b class = "target".
This is just the usual DOM work:
var greeting = JSON.toNode({div: ['Hello', '!']});
greeting.className = 'greeting';
var target = JSON.toNode({b: 'World'});
target.className = 'target';
greeting.firstChild.nextSibling.appendChild(target);
...
The purpose of this work is to do less string manipulation in JS.
Consider these two methods:
JSON.toNode({div: [start, {b: middle}, end]}).className = myGreeting;
parent.innerHTML = ['<div class="',myGreeting, '">', start,
'<b>',middle,'</b>',end].join('');
Node is a bit of a misnomer if attributes and class names are involved,
as those are part of Element.
This is just an alternative idea for attaching the Element.create method
we've been discussing.
http://www.w3.org/TR/dom/#element
http://dev.w3.org/2006/webapi/WebIDL/#idl-object
-Charles
Received on Saturday, 1 October 2011 20:54:31 UTC