[whatwg] getElementsByClassName()

Ric Hardacre whatwg at cycloid.f9.co.uk
Tue Feb 7 01:46:06 PST 2006

Dean Edwards wrote:
> Jim Ley wrote:
>> That is not immediately apparent, and neither is it apparent that a
>> classname specific shortname is worthwhile when a CSSSelector one
>> would be more appropriate.    You don't continually add methods,
>> methods are complexity, they need writing, they need testing etc.  you
>> have to have a reason to add a method.
> A good API should expose a meaningful interface to its consumer. If we 
> are allowed to define data according to a skew on its structure (HTML 
> className) then the interface to that data should reflect this.
> The getElementsByClassName() method has already been compared to the 
> getElementsByTagName() and getElementById() methods. "class" is another 
> way to slice the data. It is a core part of HTML, the language we are 
> extending.
> To me, getElementsByClassName() is a missing feature of the DOM to 
> support HTML4. I'd be happy if that were fixed in HTML5.

I think this is a very clear explanation of the reasons to include it, 
it's not as if we're discussing GetElementsByOnMouseOver() here. But 
let's throw out a use case off the top of my head:

i'm making a shopping cart and each product has a checkbox next to it, 
to select it for deletion, there are also other checkboxes on the page, 
one to agree to the terms, another to sign up for the mailing list, 
another to sign up for "advertisements from our business partners", 
another one up at the top right by a search box for a search option and 
finally the "select all for deletion" checkbox. when i click on the 
latter i want to check all the individual checkboxes for each product. 
as they're in the basket i'm specifically styling them class="prodchck". 
so to check them all all i need to do is:

function checkall()
	var a = document.getElementsByClassName("prodchck");
	for( var i = 0 ; i < a.length ; i++ )
		a[i].checked = true;

More information about the whatwg mailing list