Показать сообщение отдельно
  #9 (permalink)  
Старый 23.04.2012, 16:38
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Хочу отметить важное замечание, метод .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>

Вот такие вот секреты рассказывает нам этот метод и спецификация, которую почему-то все читают не так как я
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием