代码之家  ›  专栏  ›  技术社区  ›  Nir Levy

私有jquery实例

  •  0
  • Nir Levy  · 技术社区  · 14 年前

    我们正在编写一个类似SaaS的解决方案,它要求我们的客户 SCRIPT SRC 我们正在构建一些JavaScript代码(想想谷歌分析方案)。我们想使用jquery。但是,由于我们的客户可能已经有了冲突的jquery版本或其他冲突的框架(其中一个框架是prototype.js),我们不能告诉他们源代码jquery.js。

    我们考虑应对jquery源,创建一个“私有”jquery实例,并简单地搜索/替换 JQuery $ 函数与 myJQuery $J

    有什么理由不起作用吗?有人试过这样的吗?我们可以对插件做些什么?

    2 回复  |  直到 14 年前
        1
  •  2
  •   stuartd saeed    14 年前

    您应该能够使用 jQuery.noConflict()

    但这并不能解决插件问题:

    许多JavaScript库使用$作为函数或变量名,就像jQuery那样。在jquery的情况下,$只是jquery的别名,因此所有功能都不使用$。如果我们需要在jquery旁边使用另一个javascript库,我们可以通过调用$.noconflict()将$back的控件返回给另一个库:

    此技术与.ready()方法对jquery对象进行别名的能力结合起来特别有效,正如在传递给.ready()的回调中一样,如果我们愿意,可以使用$而不必担心以后发生冲突:

    如果需要,我们也可以通过将true作为参数传递给方法来释放jquery名称。这是很少必要的,如果我们必须这样做(例如,如果我们需要在同一页上使用多个版本的jquery库),我们需要考虑 大多数插件依赖于jquery变量的存在,在这种情况下可能无法正确操作。 .

        2
  •  3
  •   nickf    14 年前

    你可以这样做:

    // << include your own jQuery version >> 
    
    alert("jQuery version: " + jQuery().jquery);  // 1.4.2 -- or whatever you included
    
    ourJQ = jQuery.noConflict(true);
    
    alert("jQuery version: " + jQuery().jquery); // 1.3.2 -- or whatever was included before
    

    如果您包含插件或任何东西,只需将其全部包装在一个匿名函数中以创建一个闭包:

    (function ($) {
        // in here, $ is your jQuery version
        alert($().jquery); // "1.4.2"
    })(ourJQ);
    
    // out here, $ is the previously included version
    alert($().jquery) // "1.3.2"