document.querySelectorAll()
possui várias inconsistências nos navegadores e não é suportado em navegadores antigos. Isso provavelmente não causará mais problemas atualmente . Ele tem um mecanismo de escopo muito pouco intuitivo e alguns outros recursos não tão agradáveis . Além disso, com o javascript, é mais difícil trabalhar com os conjuntos de resultados dessas consultas, o que em muitos casos você pode querer fazer. jQuery fornece funções para trabalhar com eles como: filter()
, find()
, children()
, parent()
, map()
, not()
e vários outros. Sem mencionar a capacidade do jQuery de trabalhar com seletores de pseudo-classe.
No entanto, eu não consideraria essas coisas como os recursos mais fortes do jQuery, mas outras como "trabalhar" no dom (eventos, estilo, animação e manipulação) de maneira compatível com o navegador cruzado ou na interface ajax.
Se você deseja apenas o mecanismo seletor do jQuery, pode usar o que o próprio jQuery está usando: Sizzle Dessa forma, você tem o poder do mecanismo jQuerys Selector sem a sobrecarga desagradável.
Edição: Apenas para o registro, eu sou um grande fã de JavaScript baunilha. No entanto, é verdade que às vezes você precisa de 10 linhas de JavaScript, onde escreveria uma linha jQuery.
É claro que você precisa ser disciplinado para não escrever o jQuery assim:
$('ul.first').find('.foo').css('background-color', 'red').end().find('.bar').css('background-color', 'green').end();
Isso é extremamente difícil de ler, enquanto o último é bem claro:
$('ul.first')
.find('.foo')
.css('background-color', 'red')
.end()
.find('.bar')
.css('background-color', 'green')
.end();
O JavaScript equivalente seria muito mais complexo, ilustrado pelo pseudocódigo acima:
1) Encontre o elemento, considere pegar todo o elemento ou apenas o primeiro.
// $('ul.first')
// taking querySelectorAll has to be considered
var e = document.querySelector("ul.first");
2) Itere a matriz de nós filhos através de alguns loops (possivelmente aninhados ou recursivos) e verifique a classe (a lista de classes não está disponível em todos os navegadores!)
//.find('.foo')
for (var i = 0;i<e.length;i++){
// older browser don't have element.classList -> even more complex
e[i].children.classList.contains('foo');
// do some more magic stuff here
}
3) aplique o estilo css
// .css('background-color', 'green')
// note different notation
element.style.backgroundColor = "green" // or
element.style["background-color"] = "green"
Esse código seria pelo menos duas vezes mais linhas de código que você escreve com o jQuery. Além disso, você deve considerar problemas entre navegadores que comprometam a grande vantagem de velocidade (além da confiabilidade) do código nativo.
querySelector
métodos. (3) Fazer chamadas AJAX é muito mais rápido e fácil com o jQuery. (4) Suporte no IE6 +. Tenho certeza de que há muitos outros pontos que também podem ser feitos.