document.querySelectorAll()
présente plusieurs incohérences entre les navigateurs et n'est pas pris en charge dans les anciens navigateurs. Cela ne posera probablement plus de problèmes de nos jours . Il a un mécanisme de cadrage très peu intuitif et d'autres fonctionnalités pas si intéressantes . De plus, avec javascript, vous avez plus de mal à travailler avec les ensembles de résultats de ces requêtes, ce que vous voudrez peut-être dans de nombreux cas. jQuery fournit des fonctions pour travailler sur eux comme: filter()
, find()
, children()
, parent()
, map()
, not()
et plusieurs autres. Sans parler de la capacité de jQuery à travailler avec des sélecteurs de pseudo-classes.
Cependant, je ne considérerais pas ces choses comme les fonctionnalités les plus puissantes de jQuery mais d'autres choses comme "travailler" sur le dom (événements, style, animation et manipulation) d'une manière compatible crossbrowser ou l'interface ajax.
Si vous ne voulez que le moteur de sélection de jQuery, vous pouvez utiliser celui que jQuery utilise lui-même: Sizzle De cette façon, vous avez la puissance du moteur de sélection de jQuerys sans la surcharge.
EDIT: Juste pour mémoire, je suis un grand fan de JavaScript vanille. Néanmoins, c'est un fait que vous avez parfois besoin de 10 lignes de JavaScript où vous écririez 1 ligne de jQuery.
Bien sûr, vous devez être discipliné pour ne pas écrire jQuery comme ceci:
$('ul.first').find('.foo').css('background-color', 'red').end().find('.bar').css('background-color', 'green').end();
C'est extrêmement difficile à lire, alors que ce dernier est assez clair:
$('ul.first')
.find('.foo')
.css('background-color', 'red')
.end()
.find('.bar')
.css('background-color', 'green')
.end();
Le JavaScript équivalent serait beaucoup plus complexe illustré par le pseudocode ci-dessus:
1) Trouvez l'élément, envisagez de prendre tous les éléments ou seulement le premier.
// $('ul.first')
// taking querySelectorAll has to be considered
var e = document.querySelector("ul.first");
2) Parcourez le tableau de nœuds enfants via des boucles (éventuellement imbriquées ou récursives) et vérifiez la classe (liste de classes non disponible dans tous les navigateurs!)
//.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) appliquer le style css
// .css('background-color', 'green')
// note different notation
element.style.backgroundColor = "green" // or
element.style["background-color"] = "green"
Ce code représenterait au moins deux fois plus de lignes de code que vous écrivez avec jQuery. Vous devrez également prendre en compte les problèmes inter-navigateurs qui compromettraient le sérieux avantage de vitesse (en plus de la fiabilité) du code natif.
querySelector
méthodes. (3) Faire des appels AJAX est beaucoup plus rapide et plus facile avec jQuery. (4) Prise en charge dans IE6 +. Je suis sûr que de nombreux autres points pourraient être soulevés.