document.querySelectorAll()
tiene varias inconsistencias en los navegadores y no es compatible con los navegadores más antiguos. Esto probablemente ya no cause ningún problema hoy en día . Tiene un mecanismo de alcance muy poco intuitivo y algunas otras características no tan agradables . Además, con javascript le resulta más difícil trabajar con los conjuntos de resultados de estas consultas, que en muchos casos es posible que desee hacer. jQuery proporciona funciones para trabajar en ellos como: filter()
, find()
, children()
, parent()
, map()
, not()
y varios más. Sin mencionar la capacidad de jQuery para trabajar con selectores de pseudo-clase.
Sin embargo, no consideraría estas cosas como las características más fuertes de jQuery, sino otras cosas como "trabajar" en el dom (eventos, estilo, animación y manipulación) de una manera compatible con crossbrowser o la interfaz ajax.
Si solo desea el motor selector de jQuery, puede usar el que está usando jQuery: Sizzle De esa manera tiene el poder del motor jQuerys Selector sin la desagradable sobrecarga.
EDITAR: Solo para el registro, soy un gran fan de JavaScript de vainilla. Sin embargo, es un hecho que a veces necesitas 10 líneas de JavaScript donde escribirías 1 línea jQuery.
Por supuesto, debes ser disciplinado para no escribir jQuery así:
$('ul.first').find('.foo').css('background-color', 'red').end().find('.bar').css('background-color', 'green').end();
Esto es extremadamente difícil de leer, mientras que este último es bastante claro:
$('ul.first')
.find('.foo')
.css('background-color', 'red')
.end()
.find('.bar')
.css('background-color', 'green')
.end();
El JavaScript equivalente sería mucho más complejo ilustrado por el pseudocódigo anterior:
1) Encuentra el elemento, considera tomar todo el elemento o solo el primero.
// $('ul.first')
// taking querySelectorAll has to be considered
var e = document.querySelector("ul.first");
2) Itere sobre la matriz de nodos secundarios a través de algunos bucles (posiblemente anidados o recursivos) y verifique la clase (¡la lista de clases no está disponible en todos los 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) aplica el estilo CSS
// .css('background-color', 'green')
// note different notation
element.style.backgroundColor = "green" // or
element.style["background-color"] = "green"
Este código tendría al menos el doble de líneas de código que escribe con jQuery. También debería tener en cuenta los problemas entre navegadores que comprometerán la gran ventaja de velocidad (además de la confiabilidad) del código nativo.
querySelector
métodos. (3) Hacer llamadas AJAX es mucho más rápido y fácil con jQuery. (4) Soporte en IE6 +. Estoy seguro de que hay muchos más puntos que podrían hacerse también.