жаль раньше этого не читал -
Внутреннее устройство поисковых методов
PS: маленький но продуктивный поиск по селекторам
sel('div', sel('#root'))
(function(window, document) {
function classOnly_find(klass, root) { // самый продуктывный поиск по класу, не учитывая getElementsByClassName, взял с yass и модифицировал
try {
return root.querySelectorAll('.' + selector)
} catch (e){}
klass = ' ' + klass + ' '
var nodes = root.getElementsByTagName('*'),
i = 0,
node,
sets = [],
idx = 0
while (node = nodes[i++]) {
if ((' ' + node.className + ' ').indexOf(klass) != -1) {
sets[idx++] = node
}
}
return idx ? sets : []
}
function sort_elem(elems) { // сортировка елементов
return Array.prototype.slice.call(elems)
}
window.sel = function(selector, root) {
var root = root || document,
elem = 0,
tmp_selector = 0,
classOnly = /^\.([\w\-]+)$/,
idOnly = /^#([\w\-]+)$/,
tagOnly = /^([\w\-]+)$/
if (classOnly.test(selector)) {
tmp_selector = selector.slice(1)
try {
elem = root.getElementsByClassName(tmp_selector)
return elem.length ? sort_elem(elem) : []
} catch (e) {
return sort_elem(classOnly_find(tmp_selector, root))
}
}
if (idOnly.test(selector)) {
tmp_selector = selector.slice(1)
elem = [root.getElementById(tmp_selector)]
return elem.length ? sort_elem(elem) : []
}
if (tagOnly.test(selector)) {
elem = root.getElementsByTagName(selector)
return elem.length ? sort_elem(elem) : []
}
elem = root.querySelectorAll(selector)
return elem.length ? sort_elem(elem) : []
}
})(window, document)