$ versus jQuery

74

Wir wechseln bei der Arbeit von MooTools zu jQuery. Ich habe einen Kollegen, der mir sagte, ich solle $bei Verwendung einer jQuery-Methode niemals als Präfix verwenden (wenn ich ihn richtig verstanden habe). Er sagte, stattdessen sei der angemessenere oder sicherere Weg (ich bin ihm nicht wirklich gefolgt), ihn zu benutzen jQuery..

Anstatt also $.plugin(), jQuery.plugin()soll verwendet werden, zum Beispiel.

Warum sollte das so sein? Welchen Unterschied macht er mit $/ jQuery? Sollte ich das Dollarzeichen als mein Accessor vergessen? Nur unter bestimmten Umständen?

JamesBrownIsDead
quelle
Mögliches Duplikat von jQuery und MooTools Conflict
Jim G.
Mögliches Duplikat von Was ist der Unterschied zwischen diesen jQuery-fähigen Funktionen?
Ciro Santilli 法轮功 冠状 病 六四 事件 26

Antworten:

87

Warum sollte das so sein? Ist seine Unterscheidung zwischen $ und jQuery korrekt?

Weil fast jede JavaScript-Bibliothek eine Funktion namens $ definiert. Wenn Sie mehrere Bibliotheken in einem Dokument haben, können Konflikte auftreten. Wenn Sie sicher sind, dass jQuery das einzige Skript ist und immer sein wird, das diese Funktion definiert, hätte ich nichts gegen die Verwendung von $.

jQuery definiert eine gute Lösung zur Lösung von Konflikten: jQuery.noConflict . Mit dieser Funktion können Sie Ihren eigenen Namen definieren, wodurch auf jQuery zugegriffen werden kann, z

var $jq = jQuery.noConflict(true);

Wenn Sie diese Funktion aufrufen, werden die vorherigen Werte für $ - und jQuery-Variablen wiederhergestellt, sofern vorhanden, bevor Sie jQuery initialisieren. Ich erinnere mich nicht, ob andere Bibliotheken versuchen, Namenskonflikte zu lösen.

Wenn Sie $ anstelle von jQuery verwenden möchten, können Sie Ihren Code mithilfe einer selbstaufrufenden Funktion in einem separaten, privaten Bereich ausführen, der die Definition von $ enthält.

(function($){
   // your code goes here
   $("body").append("<p>Hello World!</p>");
})(jQuery); // or even jQuery.noConflict()
Rafael
quelle
10
Nur um die Terminologie zu verfälschen: Was Sie vorgestellt haben, ist kein Abschluss, sondern nur eine selbstaufrufende Funktion. Ein Abschluss ist, wenn Sie eine Funktion innerhalb einer anderen Funktion definieren und zurückgeben.
Andreas Grech
1
Mein Fehler. Ich weiß nicht, was ich gedacht habe, als ich meine Antwort geschrieben habe. Text geändert.
Rafael
2
+1 für das IIFE (sofort aufgerufener Funktionsausdruck). IMO ist dies der Verwendung vorzuziehen, noConflictda der Umfang klar definiert ist.
Ach
1
Denken Sie nicht, dass das Übergeben von "true" in noConflict Probleme bei der Verwendung von Plugins verursachen könnte? Ich habe es noch nicht ausprobiert, aber in den jQuery-Dokumenten wird erwähnt, dass die anderen jQuery-Plugins auf der Variablen 'jQuery' basieren und in dieser Situation möglicherweise nicht richtig funktionieren.
PrasadW
11

$ ist auf jquery ausgerichtet und könnte theoretisch auf etwas anderes in einer anderen enthaltenen Bibliothek oder einem anderen Skript ausgerichtet sein, was zu Verwirrung oder Schlimmerem führen kann. Wenn Sie nur jquery verwenden, sollte die Verwendung von $ in Ordnung sein.

Matt Lacey
quelle
5

Es soll Konflikte mit anderen Bibliotheken wie Prototype vermeiden, die das gleiche $ verwenden.

Ich bevorzuge das $, und es gibt kein Problem damit, wenn Sie nur Jquery verwenden.

Omar Abid
quelle
5

Zusätzlich zu den anderen Antworten zu Konflikten mit anderen Bibliotheken sollte ein Variablenname immer die Variable beschreiben. jQueryist ein viel aussagekräftigerer Name für eine Variable als $.

Dezza
quelle