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

有什么办法来检查一个特定的插件是否可用?

想象一下,你正在开发一个取决于另一个插件被加载的插件。

例如,我想要jQueryvalidation插件使用dateJS库来检查给定的date是否有效。 如果dateJS可用,在jQuery Valuation插件中检测的最佳方法是什么?

一般来说,jQuery插件是jQuery作用域上的命名空间。 您可以运行一个简单的检查来查看命名空间是否存在:

if(jQuery().pluginName) { //run plugin dependent code } 

dateJs但是不是一个jQuery插件。 它修改/扩展了javascript的date对象,并没有添加为jQuery名称空间。 你可以检查你需要的方法是否存在,例如:

  if(Date.today) { //Use the dateJS today() method } 

但是,您可能遇到API与本地Date API重叠的问题。

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

 if(typeof $.fn.pluginname !== 'undefined') { ... } 

或者因为每个插件几乎都保证有一些相同的值,所以可以使用较短的值

 if ($.fn.pluginname) { ... } 

顺便说一句,$和jQuery是可互换的,因为围绕插件的奇怪包装显示:

 (function($) { // })(jQuery)) 

closures

 (function($) { // }) 

之后立即调用该闭包“传递”jQuery作为参数

 (jQuery) 

闭包中的$被设置为等于jQuery

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

 if(jQuery().pluginName) { //run plugin dependent code } 

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

 if($.pluginname) { alert("plugin loaded"); } else { alert("plugin not loaded"); } 

这不起作用:

 if($.fn.pluginname) 

在您select的浏览器控制台中运行。

if(jQuery().pluginName){console.log('bonjour');}

如果插件存在,它会打印出“bonjour”作为你的控制台的响应。

这种方法应该可行。

 var plugin_exists = true; try { // some code that requires that plugin here } catch(err) { plugin_exists = false; } 

我强烈build议您将DateJS库与您的插件捆绑在一起,并logging您已经完成的事实。 没有什么比寻找依赖关系更令人沮丧的了。

这就是说,出于法律的原因,你可能并不总是能够捆绑一切。 用Eran Galperin的回答来保证插件的存在,也不会感到不安 。

jQuery有一个方法来检查是否有东西是一个函数

 if ($.isFunction($.fn.dateJS)) { //your code using the plugin } 

API参考: https : //api.jquery.com/jQuery.isFunction/