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

如何检查jQuery插件是否已加载?,jquery,jquery-plugins,Jquery,Jquery Plugins,有没有办法检查某个插件是否可用 假设您正在开发一个依赖于另一个加载插件的插件 例如,我希望jQuery验证插件使用dateJS库检查给定日期是否有效。在jQuery Valdation插件中,如果dateJS可用,最好的检测方法是什么?这种方法应该有效 var plugin_exists = true; try { // some code that requires that plugin here } catch(err) { plugin_exists = false; } 一

有没有办法检查某个插件是否可用

假设您正在开发一个依赖于另一个加载插件的插件


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

这种方法应该有效

var plugin_exists = true;

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

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

 if(jQuery().pluginName) {
     //run plugin dependent code
 }
然而,dateJs不是一个jQuery插件。它修改/扩展javascript日期对象,而不是作为jQuery命名空间添加。您可以检查所需的方法是否存在,例如:

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

但是如果API与本机日期API重叠,您可能会遇到问题。

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


也就是说,出于法律原因,您可能并不总是能够捆绑所有内容。谨慎使用并检查插件是否存在也无妨。

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

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

如果我们谈论的是一个合适的jQuery插件(扩展fn名称空间的插件),那么检测该插件的合适方法是:

if(typeof $.fn.pluginname !== 'undefined') { ... }
或者因为几乎可以保证每个插件都有一些与true相等的值,所以您可以使用较短的插件

if ($.fn.pluginname) { ... }
顺便说一句,$和jQuery是可以互换的,插件周围的奇怪包装说明了这一点:

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

(function($) {
    //
})
紧接着是对该闭包的调用,该闭包将jQuery作为参数“传递”

(jQuery)

对于不使用fn名称空间(例如pnotify)的插件,闭包中的$被设置为等于jQuery,这样做:

if($.pluginname) {
    alert("plugin loaded");
} else {
    alert("plugin not loaded");
}
这不起作用:

if($.fn.pluginname)

在您选择的浏览器控制台中运行此操作

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


如果插件存在,它将在控制台中打印“你好”作为响应。

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

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

API参考:

if(jQuery.fn.pluginName){…}是另一个选项可能有点过分,但是
if($.isFunction(jQuery.fn.pluginName)){…}
也将确保它至少是一个函数。我有一个函数加载脚本,`LoadScript(location,namespcae,callBack)`,回调函数在一个间隔下扭曲,这意味着在未设置名称空间,即
window.jQuery
之前,回调将不会运行,但现在我正在尝试加载一个jQuery插件并检查它,我需要调用jQuery select函数,如
jQuery().pluginName
,但当我传递它时,我的函数参数如
LoadScript(“jQuery+plugin.js”,jQuery().plugin)
jquery()不存在yetI制作了一个函数
function isPluginLoaded(plugin){return!!$.fn[plugin]}
第一个例子应该是
if(typeof$.fn.pluginname!=“undefined”)
@dops是正确的,我已经相应地编辑了答案,虽然我使用了一个否定的三元组而不是双等于相等来比较类型和值。
$
jQuery
并不总是可互换的,因为jQuery可以(比如在WordPress中)加载。这使得我总是使用速记、无冲突的安全文档:
jQuery(函数($){/$在这里是安全的…})或者,正如您所指出的,闭包模式:
(函数($){/$在这里是安全的……})(jQuery),取决于我的心情/需要。(顺便说一句,你推荐的支票是我喜欢的)类似的问题谢谢。另一个例子——Jquery Cookie Pluginall最容易被拒绝投票,因为它捕获了您可以(也应该)轻松检测到的内容