document.querySelectorAll()
weist mehrere Inkonsistenzen zwischen den Browsern auf und wird in älteren Browsern nicht unterstützt. Dies wird heutzutage wahrscheinlich keine Probleme mehr verursachen . Es hat einen sehr unintuitiven Scoping-Mechanismus und einige andere nicht so schöne Funktionen . Auch mit Javascript fällt es Ihnen schwerer, mit den Ergebnismengen dieser Abfragen zu arbeiten, was in vielen Fällen der Fall sein sollte. jQuery bietet Funktionen zur Arbeit an ihnen wie: filter()
, find()
, children()
, parent()
, map()
, not()
und einige mehr. Ganz zu schweigen von der Fähigkeit von jQuery, mit Pseudo-Klassenselektoren zu arbeiten.
Ich würde diese Dinge jedoch nicht als die stärksten Funktionen von jQuery betrachten, sondern als andere Dinge wie das "Arbeiten" am Dom (Ereignisse, Styling, Animation & Manipulation) auf Crossbrowser-kompatible Weise oder die Ajax-Oberfläche.
Wenn Sie nur die Selector-Engine von jQuery möchten, können Sie diejenige verwenden, die jQuery selbst verwendet: Sizzle Auf diese Weise haben Sie die Leistung der jQuerys Selector-Engine ohne den unangenehmen Overhead.
EDIT: Nur fürs Protokoll, ich bin ein großer Vanille-JavaScript-Fan. Es ist jedoch eine Tatsache, dass Sie manchmal 10 Zeilen JavaScript benötigen, in denen Sie 1 Zeile jQuery schreiben.
Natürlich muss man diszipliniert sein, um jQuery nicht so zu schreiben:
$('ul.first').find('.foo').css('background-color', 'red').end().find('.bar').css('background-color', 'green').end();
Dies ist äußerst schwer zu lesen, während letzteres ziemlich klar ist:
$('ul.first')
.find('.foo')
.css('background-color', 'red')
.end()
.find('.bar')
.css('background-color', 'green')
.end();
Das äquivalente JavaScript wäre weitaus komplexer, wie der obige Pseudocode zeigt:
1) Finden Sie das Element, nehmen Sie alle Elemente oder nur das erste.
// $('ul.first')
// taking querySelectorAll has to be considered
var e = document.querySelector("ul.first");
2) Durchlaufen Sie das Array der untergeordneten Knoten über einige (möglicherweise verschachtelte oder rekursive) Schleifen und überprüfen Sie die Klasse (Klassenliste nicht in allen Browsern verfügbar!).
//.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) Wenden Sie den CSS-Stil an
// .css('background-color', 'green')
// note different notation
element.style.backgroundColor = "green" // or
element.style["background-color"] = "green"
Dieser Code besteht aus mindestens doppelt so vielen Codezeilen, die Sie mit jQuery schreiben. Außerdem müssten Sie browserübergreifende Probleme berücksichtigen, die den schwerwiegenden Geschwindigkeitsvorteil (neben der Zuverlässigkeit) des nativen Codes beeinträchtigen .
querySelector
Methoden nicht funktionieren . (3) Mit jQuery können Sie AJAX-Anrufe viel schneller und einfacher tätigen. (4) Unterstützung in IE6 +. Ich bin sicher, dass noch viele weitere Punkte angesprochen werden könnten.