А вы знаете, что в Internet Explorer вплоть до 8-го у document
нет метода getElementsByClassName
? А следовательно, все ваши верстки, основанные только на классах, будут сильно проигрывать в производительности. Все фреймворки эмулируют метод вызовом getElementsByTagName('*')
с дальнейшей ручной фильтрацией.
var els = document.getElementsByTagName("*"), filtered = [], len = els.length, i;
for (i = 0; i < len; ++i) {
el = els[i];
el.className.search(/^(.* |)some-class( .*|)$/) !== -1 && filtered.push(el);
}
Ну это код на случай, если вам придется использовать vanilla.js. Обратите внимание, что в цикле нельзя изменять DOM-дерево. Нужно сначала скопировать все подходящие элементы в отдельный массив и только потом их обрабатывать. Все потому, что getElementsByTagName
(как и все остальные похожие функции) возвращает NodeList
, который динамически изменяется вместе с деревом.
May the Force be with you.
Нашел еще один JavaScript-фреймворк (спасибо Виктору за наводку), который на несколько порядков быстрее всех остальных. Прошу любить и жаловать vanilla.js! Если верить создателям, то получение всех элементов по имени тега отрабатывает быстрее jQuery в 425 раз. Я думаю, одного этого достаточно, чтобы глянуть на фреймворк.