Gibt es eine Möglichkeit zu überprüfen, ob ein bestimmtes Plugin verfügbar ist?
Stellen Sie sich vor, Sie entwickeln ein Plugin, das davon abhängt, dass ein anderes Plugin geladen wird.
Zum Beispiel möchte ich, dass das jQuery Validation-Plugin die dateJS-Bibliothek verwendet, um zu überprüfen, ob ein bestimmtes Datum gültig ist. Was wäre der beste Weg, um im jQuery Valdation-Plugin zu erkennen, ob das Datum JS verfügbar ist?
jquery
jquery-plugins
Vitor Silva
quelle
quelle
Antworten:
Im Allgemeinen sind jQuery-Plugins Namespaces im jQuery-Bereich. Sie können eine einfache Überprüfung durchführen, um festzustellen, ob der Namespace vorhanden ist:
dateJs ist jedoch kein jQuery-Plugin. Es ändert / erweitert das Javascript-Datumsobjekt und wird nicht als jQuery-Namespace hinzugefügt. Sie können beispielsweise überprüfen, ob die von Ihnen benötigte Methode vorhanden ist:
Möglicherweise treten jedoch Probleme auf, bei denen die API die native Datums-API überlappt.
quelle
if ($.isFunction(jQuery.fn.pluginName)) { ... }
auch sicherstellen, dass es zumindest eine Funktion ist.window.jQuery
nicht gesetzt ist, wird der Rückruf nicht ausgeführt, es funktioniert gut, aber jetzt wird ausgeführt Laden Sie ein Abfrage-Plugin und um dies zu überprüfen, muss ich jquery select function wie aufrufenjQuery().pluginName
, aber wenn ich es übergebe, ist mein Funktionsparameter wieLoadScript("jquery+plugin.js",jquery().plugin)
jquery () noch nicht vorhandenWenn es sich um ein geeignetes jQuery-Plugin handelt (eines, das den fn-Namespace erweitert), ist der richtige Weg, das Plugin zu erkennen:
Oder weil garantiert ist, dass jedes Plugin einen Wert hat, der true entspricht, können Sie das kürzere verwenden
Übrigens sind $ und jQuery austauschbar, wie der seltsam aussehende Wrapper um ein Plugin zeigt:
die Schließung
Es folgt sofort ein Aufruf dieses Abschlusses, der jQuery als Parameter 'übergibt'
Das $ im Abschluss wird gleich jQuery gesetzt
quelle
function isPluginLoaded(plugin) { return !!$.fn[plugin] }
if(typeof $.fn.pluginname != 'undefined')
$
undjQuery
sind nicht immer austauschbar, da jQuery (wie in WordPress) im konfliktfreien Modus geladen werden kann . Dies hat mich veranlasst, immer das kurze, konfliktsichere Dokument bereit zu verwenden:jQuery(function($) { // $ is safe in here.... });
oder, wie Sie hervorheben, das Abschlussmuster:(function($) { // $ is safe in here.... })(jQuery);
je nach Stimmung / Bedarf. (Übrigens, positiv bewertet, da die von Ihnen empfohlene Prüfung die von mir bevorzugte ist)Um jQuery-Plugins zu erkennen, habe ich festgestellt, dass die Klammern genauer sind:
quelle
Für die Plugins, die keinen fn-Namespace verwenden (zum Beispiel pnotify), funktioniert dies:
Das funktioniert nicht:
quelle
jQuery hat eine Methode, um zu überprüfen, ob etwas eine Funktion ist
API-Referenz: https://api.jquery.com/jQuery.isFunction/
quelle
Ich würde dringend empfehlen, dass Sie die DateJS-Bibliothek mit Ihrem Plugin bündeln und die Tatsache dokumentieren, dass Sie es getan haben. Nichts ist frustrierender, als Abhängigkeiten suchen zu müssen.
Aus rechtlichen Gründen können Sie jedoch möglicherweise nicht immer alles bündeln. Es tut auch nie weh, vorsichtig zu sein und anhand der Antwort von Eran Galperin zu prüfen, ob das Plugin vorhanden ist .
quelle
Führen Sie dies in der Browser-Konsole Ihrer Wahl aus.
if(jQuery().pluginName){console.log('bonjour');}
Wenn das Plugin vorhanden ist, wird "bonjour" als Antwort in Ihrer Konsole ausgedruckt.
quelle
Diese Art von Ansatz sollte funktionieren.
quelle