Hallo,
ein Werkzeug […], das einem das Selektieren von Elementen deutlich vereinfacht.
Sicher. Aber eines, das man nicht unbedingt benötigt, wenn es um Element-Selektierung geht
jQuery ist eine kompakte funktionale und objekt-orientierte Schnittstelle zum Arbeiten mit Elementlisten, zum Traversieren des DOM, zur DOM-Manipulation, für Ajax, JavaScript-basierte CSS-Animationen uvm. Die W3C-DOM-APIs sind umständlich, inkonsistent, enthalten Designfehler, sind immer noch unterschiedlich implementiert. XMLHttpRequest ist eine schreckliche API, für deklarative CSS-Animationen fehlen vernünftige APIs, Event-Handling ist ein totales Chaos.
jQuery ist eine kompaktere, leistungsfähigere und relativ einheitliche API, welche eine Reihe von sinnvollen Patterns beinhaltet und forciert, und ist daher mehr als die Summe seiner Teile. Neben der Nivellierung von Browserunterschieden ist der Erfolg von jQuery und die Auswirkung auf andere Bibliotheken darauf zurückzuführen. jQuery hat sich als Metasprache etabliert, weil die zugrundeliegende Sprache wenig geeignet ist, um Anwendungslogik auszudrücken (und selbst dafür ist jQuery noch zu wenig abstrakt, siehe Mattis Posting).
Das Betrachten einzelner Funktionen hilft einem beim Verständnis von jQuery nicht weiter. Ein Vergleich mit Low-Level XHR, QSA, DOM-Manipulation usw. ist unangebracht. Zum einen existieren auch in aktuellen Browsern noch Fallstricke, wie sich im Code jeder DOM- und Ajax-Bibliothek nachlesen lässt. Zum anderen ist es selbstverständlich, dass sich eingeschränkte, scharf umgrenzte Use-Cases mit weniger Code Low-Level schneller und kürzer umsetzen. »Das lässt sich auch ohne jQuery machen« ist kein Argument gegen vernünftige Abstraktionen und für die Benutzung von problematischen Low-Level-APIs. Es ist ein Argument dafür, zu verstehen, was überhaupt vor sich geht beim Aufruf von Fremdcode.
Es ist beileibe nicht einfach, gut strukturierten und performanten jQuery-Code zu schreiben. Dazu bedarf es ein detailliertes Wissen von jQuery *und* den zugrundeliegenden APIs (document.body war schon ein schönes Beispiel). Aber es ist unverhältnismäßig schwerer, robusten, abstrakten und wartbaren Code gänzlich ohne allgemein akzeptierte DOM- und Ajax-Abstraktionen zu schreiben.
Grüße,
Mathias