Ich habe mehrmals gehört, dass das stärkste Kapital von jQuery die Art und Weise ist, wie Elemente im DOM abgefragt und bearbeitet werden: Sie können CSS-Abfragen verwenden, um komplexe Abfragen zu erstellen, die in normalem Javascript sehr schwierig zu erstellen wären. Soweit ich weiß, können Sie jedoch mit document.querySelector
oder das gleiche Ergebnis erzielen document.querySelectorAll
, das in Internet Explorer 8 und höher unterstützt wird.
Die Frage ist also: Warum sollte man den Overhead von jQuery riskieren, wenn sein stärkstes Kapital mit reinem JavaScript erreicht werden kann?
Ich weiß, dass jQuery mehr als nur CSS-Selektoren hat, zum Beispiel browserübergreifendes AJAX, nettes Anhängen von Ereignissen usw. Aber sein Abfrageteil ist ein sehr großer Teil der Stärke von jQuery!
Irgendwelche Gedanken?
quelle
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.querySelectorAll
benötigen und alles für die Arbeit in älteren Browsern benötigen, ist jQuery eine naheliegende Wahl. Ich sage nicht , dass Sie es verwenden sollten , wie diese .Antworten:
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:
Dies ist äußerst schwer zu lesen, während letzteres ziemlich klar ist:
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.
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!).
3) Wenden Sie den CSS-Stil an
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 .
quelle
querySelectorAll
es zwischen Browsern? Und wie würde die Verwendung von jQuery dieses Problem lösen, da jQuery verwendet,querySelectorAll
wenn verfügbar?Wenn Sie Ihre Seite für IE8 oder neuer optimieren, sollten Sie wirklich überlegen, ob Sie jquery benötigen oder nicht. Moderne Browser verfügen nativ über viele Assets, die jquery bietet.
Wenn Sie Wert auf Leistung legen, können Sie mit nativem Javascript unglaubliche Leistungsvorteile erzielen (2-10 schneller) : http://jsperf.com/jquery-vs-native-selector-and-element-style/2
Ich habe eine div-tagcloud von jquery transformiert in natives Javascript (IE8 + kompatibel) umgewandelt. Die Ergebnisse sind beeindruckend. 4 mal schneller mit nur wenig Overhead.
Sie brauchen Jquery möglicherweise nicht. Sie bietet einen wirklich schönen Überblick darüber, welche nativen Methoden für welche Browserversion ersetzt werden.
http://youmightnotneedjquery.com/
Anhang: Weitere Geschwindigkeitsvergleiche, wie native Methoden mit jquery konkurrieren
Array: $ .inArray vs Array.indexOf: Jquery 24% langsamer
DOM: $ .empty vs Node.innerHtml: Jquery 97% langsamer
DOM: $ .on vs Node.addEventListener: Jquery 90% langsamer
DOM: $ .find vs Node.queryselectorall: Jquery 90% langsamer
Array: $ .grep vs Array.filter: Native 70% langsamer
DOM: $ .show / hide vs display none: Jquery 85% langsamer
AJAX: $ .ajax vs XMLHttpRequest: Jquery 89% langsamer
Höhe: $ .outerHeight vs offsetHeight: Jquery 87% langsamer
Attr: $ .attr vs setAttribute: Jquery 86% langsamer
quelle
$(el).find(selector)
ist nicht gleichel.querySelectorAll(selector)
und die Leistung von nativen Methoden ist oft ziemlich schrecklich: stackoverflow.com/q/14647470/1047823Um zu verstehen, warum jQuery so beliebt ist, ist es wichtig zu verstehen, woher wir kommen!
Vor etwa einem Jahrzehnt waren IE6, Netscape 8 und Firefox 1.5 die Top-Browser. Damals gab es nur wenige browserübergreifende Möglichkeiten, ein Element aus dem DOM auszuwählen
Document.getElementById()
.Als jQuery 2006 veröffentlicht wurde , war es ziemlich revolutionär. Damals setzte jQuery den Standard für die einfache Auswahl / Änderung von HTML-Elementen und das Auslösen von Ereignissen, da seine Flexibilität und Browserunterstützung beispiellos waren.
Jetzt, mehr als ein Jahrzehnt später, sind viele Funktionen, die jQuery so beliebt gemacht haben, in den JavaScript-Standard aufgenommen worden:
$()
können Sie jetzt verwendenDocument.querySelectorAll()
$el.on()
können Sie jetzt verwendenEventTarget.addEventListener()
$el.toggleClass()
können Sie jetzt verwendenElement.classList.toggle()
Diese waren 2005 noch nicht allgemein verfügbar. Die Tatsache, dass sie heute verfügbar sind, wirft offensichtlich die Frage auf, warum wir jQuery überhaupt verwenden sollten. Und tatsächlich fragen sich die Leute zunehmend , ob wir jQuery überhaupt verwenden sollten .
Wenn Sie also der Meinung sind, dass Sie JavaScript gut genug verstehen, um auf jQuery zu verzichten, tun Sie dies bitte! Fühlen Sie sich nicht gezwungen, jQuery zu verwenden, nur weil so viele andere es tun!
quelle
Das liegt daran, dass jQuery viel mehr kann als nur
querySelectorAll
.Erstens funktioniert jQuery (und insbesondere Sizzle) für ältere Browser wie IE7-8, die keine CSS2.1-3-Selektoren unterstützen.
Außerdem bietet Sizzle (die Selektor-Engine hinter jQuery) viele fortgeschrittenere Selektorinstrumente wie die
:selected
Pseudoklasse, einen erweiterten:not()
Selektor, eine komplexere Syntax wie in$("> .children")
und so weiter.Und es funktioniert fehlerfrei über alle Browser hinweg und bietet alles, was jQuery bieten kann (Plugins und APIs).
Ja, wenn Sie der Meinung sind, dass Sie sich auf einfache Klassen- und ID-Selektoren verlassen können, ist jQuery zu viel für Sie und Sie würden eine übertriebene Auszahlung zahlen. Wenn Sie dies jedoch nicht tun und alle Vorteile von jQuery nutzen möchten, verwenden Sie es.
quelle
Die Sizzle
querySelectorAll
-Auswahl- Engine von jQuery kann verwendet werden, wenn sie verfügbar ist. Außerdem werden Inkonsistenzen zwischen Browsern ausgeglichen, um einheitliche Ergebnisse zu erzielen. Wenn Sie nicht alle jQuery-Dateien verwenden möchten, können Sie Sizzle auch separat verwenden. Dies ist ein ziemlich grundlegendes Rad zu erfinden.Hier sind einige Kirschpflücken aus der Quelle, die zeigen, was jQuery (mit Sizzle) für Sie aussortiert:
Safari-Macken-Modus:
Wenn dieser Schutz fehlschlägt, wird eine Version von Sizzle verwendet, die nicht erweitert wurde
querySelectorAll
. Weiter unten gibt es spezielle Handles für Inkonsistenzen in IE, Opera und dem Blackberry-Browser.Und wenn alles andere fehlschlägt, wird das Ergebnis von zurückgegeben
oldSizzle(query, context, extra, seed)
.quelle
In Bezug auf die Wartbarkeit von Code gibt es mehrere Gründe, sich an eine weit verbreitete Bibliothek zu halten.
Eine der wichtigsten ist, dass sie gut dokumentiert sind und Communitys wie ... say ... stackexchange haben, in denen Hilfe zu den Bibliotheken gefunden werden kann. Mit einer benutzerdefinierten codierten Bibliothek haben Sie den Quellcode und möglicherweise eine Anleitung, es sei denn, die Codierer haben mehr Zeit damit verbracht, den Code zu dokumentieren als ihn zu schreiben, was verschwindend selten ist.
Das Schreiben Ihrer eigenen Bibliothek könnte für Sie funktionieren , aber der Praktikant am nächsten Schreibtisch hat es möglicherweise leichter, sich mit so etwas wie jQuery vertraut zu machen.
Nennen Sie es Netzwerkeffekt, wenn Sie möchten. Dies bedeutet nicht, dass der Code in jQuery überlegen ist. Nur dass die Prägnanz des Codes es einfacher macht, die Gesamtstruktur für Programmierer aller Schwierigkeitsgrade zu erfassen, schon allein deshalb, weil in der angezeigten Datei mehr Funktionscode auf einmal sichtbar ist. In diesem Sinne sind 5 Codezeilen besser als 10.
Zusammenfassend sehe ich die Hauptvorteile von jQuery in prägnantem Code und Allgegenwart.
quelle
Hier ist ein Vergleich, wenn ich dasselbe Attribut anwenden möchte, z. B. alle Elemente der Klasse "meine Klasse" ausblenden. Dies ist ein Grund, jQuery zu verwenden.
jQuery:
JavaScript:
Da jQuery bereits so beliebt ist, sollte document.querySelector () sich wie $ () verhalten. Stattdessen wählt document.querySelector () nur das erste übereinstimmende Element aus, wodurch es nur zur Hälfte nützlich ist.
quelle
document.querySelectorAll('.my-class').forEach(el => el.style.display = 'none');
. Selbst wenn es kürzer ist, ist die native Leistung immer besser.wie die offizielle Seite sagt: "jQuery: Die weniger schreiben, mehr tun, JavaScript-Bibliothek"
Versuchen Sie, den folgenden jQuery-Code ohne Bibliothek zu übersetzen
quelle
addClass()
undshow()
zähle nicht wirklich. Und wie$('p.neat')
können Sie einen Blick auf querySelector / Alle haben.document.querySelectorAll('p.neat').forEach(p=>p.classList.add('ohmy'));
und lassen Sie CSS den Rest erledigen. Etwas längerer Code, aber viel effizienter. Natürlich war seine Lösung in den Legacy IE-Tagen nicht so verfügbar. Der Teil „Mehr tun“ ist ironisch. jQuery benötigt ungefähr hundert Codezeilen, um etwas zu finden. Daher ist es nicht immer produktiv, mehr zu tun.Ich denke, die wahre Antwort ist, dass jQuery schon lange zuvor entwickelt wurde
querySelector/querySelectorAll
es in allen gängigen Browsern verfügbar war.Die erste Veröffentlichung von jQuery erfolgte 2006 . Tatsächlich war sogar jQuery nicht der erste, der CSS-Selektoren implementierte .
IE war der letzte zu implementierende Browser
querySelector/querySelectorAll
. Die 8. Version wurde 2009 veröffentlicht .Daher ist die Auswahl von DOM-Elementen nicht mehr die Stärke von jQuery. Es gibt jedoch noch viele Extras im Ärmel, wie Verknüpfungen zum Ändern des CSS- und HTML-Inhalts von Elementen, Animationen, Ereignisbindung und Ajax.
quelle
Alte Frage, aber ein halbes Jahrzehnt später lohnt es sich, sie noch einmal zu überdenken. Hier diskutiere ich nur den Selektoraspekt von jQuery.
document.querySelector[All]
wird von allen aktuellen Browsern bis hin zu IE8 unterstützt, sodass die Kompatibilität kein Problem mehr darstellt. Ich habe auch keine nennenswerten Leistungsprobleme festgestellt (es sollte langsamer sein alsdocument.getElementById
, aber meine eigenen Tests legen nahe, dass es etwas schneller ist).Wenn es darum geht, ein Element direkt zu bearbeiten, ist es daher jQuery vorzuziehen.
Beispielsweise:
ist weit überlegen:
Um überhaupt etwas zu tun, muss jQuery hundert Codezeilen durchlaufen (ich habe einmal Code wie den oben genannten nachverfolgt, um zu sehen, was jQuery tatsächlich damit gemacht hat). Dies ist eindeutig eine Zeitverschwendung für alle.
Die anderen erheblichen Kosten von jQuery sind die Tatsache, dass alles in ein neues jQuery-Objekt eingeschlossen wird. Dieser Overhead ist besonders verschwenderisch, wenn Sie das Objekt erneut entpacken oder eine der Objektmethoden verwenden müssen, um Eigenschaften zu verarbeiten, die bereits auf dem ursprünglichen Element verfügbar sind.
JQuery hat jedoch den Vorteil, dass es mit Sammlungen umgeht. Wenn die Anforderung ist Satz Eigenschaften mehrerer Elemente, hat jQuery eine eingebaute in
each
Methode , die so etwas wie dies ermöglicht:Um dies mit Vanilla JavaScript zu tun, wäre Folgendes erforderlich:
was manche entmutigend finden.
jQuery-Selektoren unterscheiden sich ebenfalls geringfügig, aber moderne Browser (außer IE8) profitieren nicht wesentlich.
In der Regel warne ich davor, jQuery für neue Projekte zu verwenden:
Wenn keines der oben genannten Punkte von Bedeutung ist, tun Sie, was Sie wollen. JQuery ist jedoch für die plattformübergreifende Entwicklung nicht mehr so wichtig wie früher, da modernes JavaScript und CSS viel weiter gehen als früher.
Andere Funktionen von jQuery werden hier nicht erwähnt. Ich denke jedoch, dass auch sie einen genaueren Blick brauchen.
quelle
Der Deal ist mit der $ () -Funktion, die ein Array erstellt und dann für Sie auflöst, aber mit document.querySelectorAll () erstellt es ein Array und Sie müssen es auflösen.
quelle
Nur ein Kommentar dazu: Bei Verwendung von Material Design Lite gibt jquery selector aus irgendeinem Grund die Eigenschaft für Material Design nicht zurück.
Zum:
Das funktioniert:
Das tut nicht:
quelle