2010-05-02 15 views
16

Ich entwickle etwas JavaScript, das entweder mit Prototype.js oder JQuery funktionieren sollte, also brauche ich einen Weg, um zu identifizieren, was die primäre Bibliothek ist. Wie kann ich das machen?

+2

Was passiert, wenn sie beide geladen? –

Antwort

19

können Sie prüfen, für jQuery wie folgt aus:

if (window.$ === window.jQuery) 
5

Nun, könnte man auf die Anwesenheit von jQuery überprüfen:

if(window.jQuery !== "undefined") 
{ 
    // jQuery Yay! 
} 

und dann, wenn es zu $ zugewiesen

if(window.jQuery === window.$) 
{ 
    // jQuery Yay! 
} 
+1

Vermutlich meinen Sie im ersten Beispiel 'typeof'. – bobince

3

Könnte jQuery noconflict helfen? Dann könnten Sie jQuery für jQuery und $ für Prototyp verwenden.

3

@SLaks und @Chacha102 sind das Richtige für jQuery Erkennung, aber wenn Sie wollen sicherstellen, dass, wenn die $ Funktion nicht von jQuery ist, von PrototypeJS kommt, können Sie:

​if (typeof $ == 'function'​​) { 
    if ($.fn && $.fn.jquery) { // $.fn.jquery contains the version number 
    // jquery 
    } else if (window.Prototype && Prototype.Version) { 
    // prototype 
    } 
}​ 
+0

Nur weil Prototyp da ist, heißt das nicht, dass '$' nicht überschrieben wurde. – SLaks

+0

SLaks, ja, es könnte schon überschrieben werden, deshalb suche ich zuerst nach jQuery, aber wenn etwas anderes es tat, kann man es nicht wirklich wissen ... – CMS

1

schreiben es ohne die Abhängigkeit von irgend Bibliothek und es sollte mit jQuery und Prototype gut funktionieren;)

Ernsthaft, ist nicht einer der Hauptpunkte dieser Bibliothek, um zu vermeiden, drei verschiedene Variationen jeder Codezeile für jeden Browser schreiben zu müssen? Code zu schreiben, um zu versuchen, mehr als einer Bibliothek zu entsprechen, scheint ziemlich albern zu sein.

Wie auch immer, wenn Sie die Dokumentation für eine der beiden Bibliotheken für etwa 5 Sekunden betrachten, sollten Sie einen Hinweis darauf geben, welche Eigenschaften jq $ dieses pt $ nicht haben wird. Das deutet darauf hin, dass Sie sich nicht wirklich die Mühe gemacht haben, die Unterschiede zwischen den Frameworks zu betrachten (was offensichtlich der beste Weg ist, sie auseinander zu halten, oder?). Sind Sie sicher, dass Sie wissen, worauf Sie sich einlassen?

Wie einige erwähnt haben:

var whosThatDollarSign = typeof window.$=='undefined' ? 'none' : (window.$==window.jQuery ? 'jQuery' : 'not jQuery') 
+0

Ich würde das wählen, wenn es nicht alles bekommen würde Predigt am Ende. –

+0

Mach dir keine Sorgen, ich verliere keinen Schlaf drüber. –

1

ich einige JavaScript bin zu entwickeln, die entweder mit Prototype.js oder JQuery funktionieren sollte, so muss ich einen Weg zu erkennen, was die primäre Bibliothek ist im Einsatz. Wie kann ich das machen?

Ihre Frage ist zweideutig, es gibt zwei offensichtliche Bedeutungen für mich, also werde ich beide beantworten.

Wenn Sie wollen, dass Sie Code schreiben, der unabhängig davon funktioniert, ob jQuery oder Prototype.js verwendet wurde, ist die Antwort, dass es sehr einfach ist, Code zu schreiben, der unabhängig von den Bibliotheken funktioniert , geladen. Es muss also nicht ermittelt werden, welches verwendet wurde.

Wenn Sie meinen, dass Sie zwei separate Skripte schreiben werden, eines für jQuery und eines für Prototype.js, dann laden Sie je nachdem, welches Sie "erkennen", ein Skript oder das andere Basieren Sie Ihren Code auf eine sehr schlechte Architektur. Keine dieser Bibliotheken unterstützt eine besonders große Auswahl an Browsern und beide müssen aktualisiert werden, sobald eine neue Version herauskommt, sogar von den "populären", die sie unterstützen.

Der Versuch, beide mit separaten Skripten zu unterstützen, wird zu ständigen Wartungskopfschmerzen führen - mal zwei. Oder vielleicht ist das deine Absicht.

-

Rob

Verwandte Themen