【问题标题】:If you include 2 version of jQuery in a page how do you restrict a plugin to just one of them?如果您在页面中包含 2 个版本的 jQuery,您如何将插件限制为其中一个?
【发布时间】:2011-02-21 21:55:17
【问题描述】:

所以这个问题并不像一开始听起来那么疯狂。我正在开发一段 javascript 代码以放入我的客户页面。我担心的是他们是否在他们的网站上使用了另一个版本的 jQuery。

我从Jquery docs 知道这样的事情应该可以工作。

var dom = {};
dom.query = jQuery.noConflict(true);

问题是我也在使用一些jquery插件,即fancyboxmousewheel。那么如何确保我的 jQuery 版本是唯一可以使用这些插件的版本。如果我们的一位客户碰巧在他们的页面中使用相同的但不同的版本,我不希望发生冲突。

我现在能想到的唯一确定的方法是修改插件,使它们只调用 dom.query

【问题讨论】:

  • 他们有什么版本,您希望使用什么版本?我冒险猜测 - 大部分库都是向后兼容的,因此运行新版本可能不会完全具有破坏性。
  • Mootools 1.3 + Mootools 1.2 不能一起工作。测试一下!

标签: javascript jquery jquery-plugins fancybox


【解决方案1】:

你可以使用一个技巧。如果您的 jQuery 版本是第二个加载的版本,您需要在加载之前先移动到安全的版本,就像这样

<script type="text/javascript">
    (function($){
       var theirs_jquery = $;
    })(jQuery);
</script>

然后添加你的 jQuery 版本脚本包含标签

<script src="link/to/my/jquery.js"></script>
 <!-- add your plugins -->
<script src="link/to/my/jquery/plugins/plugin1.js"></script>
<script src="link/to/my/jquery/plugins/plugin2.js"></script>

然后添加另一个脚本块,如下所示

<script type="text/javascript">
(function(){
    var $$ = jQuery; // this is your shortcut
    var $ = theirs_jquery; // put back their version
})(jQuery);
</script>

在此之后,您可以使用 $$ 快捷方式访问您的 jquery 版本

【讨论】:

  • 如果您曾经继承 javascript 对象,那么您可以识别这种模式,就像您在覆盖方法时使用的模式一样,但您也需要保留基对象方法以供执行。
  • 所以我不必使用 jQuery.noConflict() 吗?我还需要单独的脚本标签吗?我有一些 javascript 可以将我的插件添加到文档中,这样我就可以将它们全部保存在另一个文件中。我可以在两者之间使用我的 includeJsFile 函数来编写您的代码吗?
  • [A1] 我认为您不必这样做,无论哪种方式,您只需几步即可返回 $ 快捷方式。
  • [A2] 你不必分隔脚本标签,只需将它们包含在 (function(tolocal){ /*use to local here*/ })(global);
  • [A3] 是的,如果它被实现为同步脚本加载,则可以。您不能在需要之前执行或解析代码。
【解决方案2】:

你可以使用

(function($) {        

})(dom);

包装你的电话。

这将 dom 映射到 $,仅用于替换任何外部 $ 定义中的代码。

但我不确定这是否适用于 2 个不同的 jQuery,也许 jQuery 不能与其他 jQuery 版本共存。

【讨论】:

  • 是的,但是你需要更改插件脚本文件
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-26
  • 1970-01-01
  • 2010-09-29
  • 2020-02-14
  • 1970-01-01
  • 2011-08-12
  • 1970-01-01
相关资源
最近更新 更多