如何检查是否加载了jQuery插件?

Vit*_*lva 217 jquery jquery-plugins

有没有办法检查特定的插件是否可用?

想象一下,您正在开发一个依赖于正在加载的另一个插件的插件.

例如,我希望jQuery Validation插件使用dateJS库来检查给定日期是否有效.如果dateJS可用,在jQuery Valdation插件中检测的最佳方法是什么?

Era*_*rin 352

一般来说,jQuery插件是jQuery范围内的命名空间.您可以运行一个简单的检查以查看命名空间是否存在:

 if(jQuery().pluginName) {
     //run plugin dependent code
 }
Run Code Online (Sandbox Code Playgroud)

但是dateJs不是一个jQuery插件.它修改/扩展了javascript日期对象,并没有添加为jQuery命名空间.您可以检查是否存在所需的方法,例如:

 if(Date.today) {
      //Use the dateJS today() method
 }
Run Code Online (Sandbox Code Playgroud)

但是,您可能会遇到API与本机Date API重叠的问题.

  • if(jQuery.fn.pluginName){...}是另一种选择 (58认同)
  • 也许有点矫枉过正,但是`if($ .isFunction(jQuery.fn.pluginName)){...}`也会确保它至少是一个函数. (5认同)

rmi*_*lle 93

如果我们正在谈论一个正确的jQuery插件(在那扩展了fn命名空间),那么检测插件的正确方法是:

if(typeof $.fn.pluginname !== 'undefined') { ... }
Run Code Online (Sandbox Code Playgroud)

或者因为每个插件几乎都保证有一些等于true的值,所以你可以使用更短的

if ($.fn.pluginname) { ... }
Run Code Online (Sandbox Code Playgroud)

顺便说一句,$和jQuery是可互换的,因为围绕插件的奇怪外观展示了:

(function($) {
    //
})(jQuery))
Run Code Online (Sandbox Code Playgroud)

关闭

(function($) {
    //
})
Run Code Online (Sandbox Code Playgroud)

然后立即调用该闭包'传递'jQuery作为参数

(jQuery)
Run Code Online (Sandbox Code Playgroud)

闭包中的$设置为等于jQuery

  • 我做了一个函数`function isPluginLoaded(plugin){return !! $.fn [plugin]}` (2认同)
  • 第一个例子应该是`if(typeof $ .fn.pluginname!='undefined')` (2认同)

小智 11

为了检测jQuery插件,我发现使用括号更准确:

if(jQuery().pluginName) {
    //run plugin dependent code
}
Run Code Online (Sandbox Code Playgroud)


tra*_*nte 8

对于不使用fn命名空间的插件(例如pnotify),这适用于:

if($.pluginname) {
    alert("plugin loaded");
} else {
    alert("plugin not loaded");
}
Run Code Online (Sandbox Code Playgroud)

这不起作用:

if($.fn.pluginname)
Run Code Online (Sandbox Code Playgroud)