Хочу отметить важное замечание, метод
.getElementsByClassName реализован полностью по указаниям спецификации, то-есть все реализации лежащие по инету не правильные, и сделаны из-за невнимательности прочтения документа.
Как работает метод, который все выкладывают по инету:
допустим мы хотим найти элемент с классом .blah
document.getElementsByClassName( 'blah' ); // все как и везде
Но если указать список классов:
document.getElementsByClassName( 'blah lala' );
То в этом случае реализации кишащие по инету выдадут все элементы с классом
.blah и элементы с классом
.lala то-есть:
<div class="blah"></div>
<div class="lala"></div>
Найдет оба элемента, так как они удовлетворяют запросам.
Как же все таки реально должен работать этот метод, то-есть как описано в спецификации. При попытке искать со списком классов, то-есть у нас есть HTML:
<div class="blah"></div>
<div class="lala"></div>
и мы пытаемся найти элементы:
document.getElementsByClassName( 'blah lala' );
Нам метод не выдаст ни одного элемента, потому что по критериям не проходят. Отличия тут таковы, что список этих классов должен иметь один и тот-же элемент, если хоть одного класса в элементе нет, то он пропускается. То-есть наш код найдет элемент например вот такой:
<div class="lala blah"></div>
или такой:
<div class="lala test some blah"></div>
Вот такие вот секреты рассказывает нам этот метод и спецификация, которую почему-то все читают не так как я