On Fri, 14 Mar 2008 18:47:34 +0100, Chris Wilson <[EMAIL PROTECTED]> wrote:

Simon Pieters [mailto:[EMAIL PROTECTED] wrote:
I understand that IE works this way internally, but this behavior -- that all attributes are reflected by DOM attributes and that any DOM attributes
(or JS properties) on elements also turn into real attributes -- is not
backed up by any DOM spec, and Opera, Safari and Firefox don't do this. In
those browsers, unknown attributes are only accessible with
getAttribute(), and saying elm.foobar = 'x' just creates a JS property
"foobar" without adding/changing the "foobar" attribute on the element.

IIRC, this does not necessarily happen with unknown attributes - only with known attributes. If it's a known attribute, it gets reflected into the DOM with camelCasing.

The hyphenation/camelCasing part seems to be special-cased. Unknown attributes with dashes in them are still reflected as JS properties, available using ['foo-bar'] syntax, and .fooBar turns into fooBar=''.


If it's an unknown/unrecognized attribute, it is only accessible via getAttribute().

This doesn't seem to be the case in IE8, AFAICT:

   
http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C!DOCTYPE%20html%3E%0D%0A%3Cbody%20foo%3Dx%3E%3Cpre%3E%0D%0A%3Cscript%3E%0D%0Adocument.body.bar%3D'y'%3B%0D%0Adocument.writeln(document.body.getAttribute('bar')%20%3F%20'FAIL%3A%20.bar%20turned%20into%20real%20attribute'%20%3A%20'PASS')%3B%0D%0Adocument.writeln(document.body.foo%20%3F%20'FAIL%3A%20%26lt%3Bbody%20foo%3Dx%3E%20turned%20into%20a%20JS%20property'%20%3A%20'PASS')%3B%0D%0A%3C%2Fscript%3E

--
Simon Pieters
Opera Software

Reply via email to