- From: Charles Pritchard <chuck@jumis.com>
- Date: Wed, 03 Aug 2011 09:51:47 -0700
- To: Anne van Kesteren <annevk@opera.com>
- CC: Glenn Maynard <glenn@zewt.org>, "Tab Atkins Jr." <jackalmage@gmail.com>, Aryeh Gregor <ayg@aryeh.name>, Maciej Stachowiak <mjs@apple.com>, WebApps WG <public-webapps@w3.org>
On 8/3/2011 8:51 AM, Anne van Kesteren wrote:
> On Wed, 03 Aug 2011 17:46:50 +0200, Glenn Maynard <glenn@zewt.org> wrote:
>> What's the difference?
>
> ele.setAttribute(x, val) works on any element. ele[x] = val does not.
> They also behave differently for a large number of cases and the
> latter often takes values of a type other than DOMString.
Seems to me that aria- and data- prefixes are a special case:
data-* and aria-* should always run through the setAttribute code path.
IE9 does have aria attributes on the element as well, in camel case:
element.ariaSelected===element.getAttribute('aria-selected')
It's "always" going to be the case, that setting 'data-*' or 'aria-*'
will assign a DOM string content attribute.
>> I'd expect this:
>>
>> a = Element.create("a", {href: "http://link", onclick: function(e) { },
>> custom: "value" }, "link");
>>
>> to be essentially equivalent to
>>
>> a = document.createElement("a");
>> a.appendChild(document.createTextNode("link"));
>> attrs = {href: "http://link", onclick: function(e) { }, custom:
>> "value" };
>> for(key in attrs) a[key] = attrs[key];
>
> Would you expect to write contenteditable as contenteditable or as
> contentEditable? Also, would you expect custom to end up as a content
> attribute on that <link> element? Because it will not with this code.
>
contentEditable, tabIndex, innerHTML seem appropriate.
data-* and aria-* should always run through the setAttribute code path.
The DOM footprint should be light.
Example:
Element.create('a', { webkitShadow: Element.create('p','example shadow
paragraph') }, 'this is a link & button') .
attr({role: 'button', onclick: function() { alert('clicked!') }).
attr({tabIndex: 0, data-status: 'this is an example',
custom-attribute: 'not serialized'}).
attr({title: 'title example!', href: 'link.html'});
outerHTML, more or less:
<a title="title example!" role="button" tabindex="0" data-status="this
is an example" href="link.html">this is a link & button</a>
webkitShadow here:
https://lists.webkit.org/pipermail/webkit-dev/2011-June/017340.html
If an author already has their string sanitized, they would pass through
the innerHTML attribute anyway.
var x = document.createElement; has not been a reliable shortcut.
var x = Element.create(); could be.
-Charles
Received on Wednesday, 3 August 2011 16:52:18 UTC