[whatwg] [WHATWG] HTMLElement ids as global object properties

Jukka K. Korpela jkorpela at cs.tut.fi
Fri Apr 1 01:24:55 PDT 2011


Alexandre Morgaut wrote:

> My biggest nightmare today is that recent browsers like Chrome, IE9,
> FF4 generate a global variable from the id of each HTMLElement of the
> document...

On a day like this, I was very suspicious about information like that, but 
it turns out to be true and also applies to Opera and Safari.

Using <h1 id="foo">Hello world</h1> in markup and alert(foo.innerHTML) I get 
"Hello world" instead of an error message. On the other hand, if I declare 
var foo, I don't get an error message about duplicate declaration.

> Let's imagine the effects of existing HTMLElements with id like
> "location", "document", "event", "toolbar", or even "window"...

Using "location" instead of "foo", I get "undefined". Ditto if I declare a 
function with that name, before _or after_ the reference to foo.

So the automagic generation of variables corresponding to id attribute 
values does not extend to names that are already defined.

But it's not that simple:

alert(foo.innerHTML);
var foo;

causes the error message "foo is undefined".

Is there something about this in some document on HTML(5)?

Technically this might be regarded as JavaScript error handling (treating an 
undefined identifier as referring to an HTMLElement with that id) that is 
outside the scope of any HTML specs. But in practice it looks far too 
important to be ignored, especially since the browser behavior is so 
consistent.

When I test the simple case (no defined name clashing with the id value) on 
Firefox with Firebug enabled, I get a _warning_ from Firebug, saying that an 
element was referred to using an ID/NAME and that the W3C-conforming 
document.getElementById() request should be used instead. So this seems to 
be a known issue to some extent.

-- 
Yucca, http://www.cs.tut.fi/~jkorpela/ 




More information about the whatwg mailing list