- From: Cameron McCormack <cam@mcc.id.au>
- Date: Mon, 9 Jul 2007 20:50:17 +1000
- To: public-html <public-html@w3.org>
Hi Simon. Simon Pieters: > (This is part of my detailed review of the Document Object Model section.) > > For the HTMLCollection[1], the spec says: > > In ECMAScript implementations, objects that implement the HTMLCollection > interface must also have a [[Get]] method that, when invoked with a > property name that is a number, acts like the item() method would when > invoked with that argument, and when invoked with a property name that > is a string, acts like the namedItem() method would when invoked with > that argument. > > ...and for HTMLFormControlsCollection and HTMLOptionsCollection, it says: > > In the ECMAScript DOM binding, objects implementing the > HTMLFormControlsCollection interface must support being dereferenced > using the square bracket notation, such that dereferencing with an > integer index is equivalent to invoking the item() method with that > index, and such that dereferencing with a string index is equivalent to > invoking the namedItem() method with that index. > > Do these paragraphs mean the same thing? Why are they phrased differently? Yeah, they shouldn’t really be different since they are meant to say the same thing. In any case, I expect those sections to replace/removed once the Language Bindings for DOM Specifications spec is published. Then, this behaviour can be specified from the IDL. [1] > In any case, they don't quite match reality. > > http://simon.html5.org/test/html/dom/htmlcollections/item-vs-namedItem/ I did some similar tests too, though with some “tamer” values: http://mcc.id.au/2007/05/binding-tests/ (Specifically, test 036.) > There are some points of non-interop here. > > When a string is used that looks like an integer in the base 8, or looks > like a number with decimals: > > .elements["010"] > .elements["0.0"] > .elements["0."] > > ...then it is equivalent to .item() in Safari and IE7, and equivalent to > .namedItem() in Firefox and Opera. > > Another case is where the string starts with a dot, or looks like a float > with an exponent: > > .elements[".0"] > .elements["0e0"] > > The above are equivalent to .item() in Safari and .namedItem() in the > others. > > We also have this case: > > .elements["0.."] > > ...which is equivalent to .item(0) in IE and .namedItem("0..") in the > others. (What comes after the first dot doesn't matter.) > > Finally, when an array is used with more than one item: > > .elements[["0","1"]] > > ...then IE uses the first item of the array whereas the others use the > array's .toString(). That is a strange one! > Below is what IE7 seems to do, where "obj" is what you pass to the [[Get]] > method... > > 1. If obj is an array, let obj be the array's first item. > > 2. If obj is an integer, a float or Infinity, then pass that to .item() > and abort these steps. > > 3. If obj is a string, check whether the string matches the regex > /^(\d+)(\..*)?$/. If it does, pass $1 to .item() and abort these > steps. > > 4. Pass obj.toString() to .namedItem(). That’s different from what I currently have in the Bindings spec, which is basically “do a ToUint32() on the property name, and if the result is a non-negative integer, use the index getter, otherwise use the name getter”. Do you think IE7’s rules should be used? [1] http://dev.w3.org/cvsweb/~checkout~/2006/webapi/Binding4DOM/Overview.html?rev=1.44&content-type=text/html;%20charset=utf-8#get -- Cameron McCormack, http://mcc.id.au/ xmpp:heycam@jabber.org ▪ ICQ 26955922 ▪ MSN cam@mcc.id.au
Received on Monday, 9 July 2007 10:50:48 UTC