[whatwg] getElementsByClassName()

Aankhen wrote:
> On 9/5/05, Lachlan Hunt <lachlan.hunt at lachy.id.au> wrote:
> 
>>1. Equivalent to ("foo", "bar") (or [class~=foo][class~=bar], or
>>    .foo.bar in CSS)
>>2. The way it currently works. ie. matches "foo bar", not "bar foo"
>>3. Error, return nothing.
> 
> I suggest #2, which implies consistently treating the first argument
> passed to the function as a single class name to match (this means
> "foo bar" would always return no elements,

No, as already demonstrated, #2 does return matches in some cases. 
However, after some more testing, the results are inconsistent among 
browsers, which makes that alternative inappropriate.  For example, 
compare the results of these three tests in different browsers:  (I 
tested Firefox, Opera and IE on Windows).

http://www.lachy.id.au/dev/script/examples/DOM/tests/007.html
http://www.lachy.id.au/dev/script/examples/DOM/tests/011.html
http://www.lachy.id.au/dev/script/examples/DOM/tests/012.html

007: Firefox: E and F, Opera and IE: E
011: All: (none)
012: Firefox: (none), Opera and IE: F

The only difference between the tests is the white space in the 
parameter.  The first uses a single space, the second uses multiple 
spaces and the third uses a space followed by a tab.

> Special-casing "foo bar" and other values seems to be adding
> complexity without much return.

It's not about special casing, it's about defining error recovery 
consistently between implementations.  As it's currently defined, ("foo 
bar" is, I believe, erroneous since each parameter represents a single 
class name.  However, the results from different implementations should 
be identical, which is why the behaviour needs to be defined and why #2 
is not appropriate.

That leaves the choice between #1 and #3 (or possibly #4 if someone 
thinks of another).  I have no strong opinion either way, I just need it 
defined so I can implement it.

> If multiple class names really need to be handled, my suggestion would
> be to take a single array as a parameter, e.g.
> `getElementsByClassName(["foo"])` and `getElementsByClassName(["foo",
> "bar"])`.

Multiple class names are already supported with the ability to pass any 
number of arguments.  It is defined in the spec, and I implemented it, as:

getElementsByClassName(className1 [, className2, ...] )

-- 
Lachlan Hunt
http://lachy.id.au/

Received on Monday, 5 September 2005 01:43:10 UTC