如何在我的javascript模块中包含jquery而不与全局命名空间冲突?

时间:2012-08-02 17:07:44

标签: javascript jquery

我正在开发一个javascript模块,我希望它是独立的。我还想使用jQuery提供的跨浏览器功能。如何在我的模块中包含jQuery而不与潜在的用户包含的jQuery冲突?

是否有一般方法可以执行此操作,以便我可以将其他库添加到项目中而不会与全局命名空间冲突?

1 个答案:

答案 0 :(得分:1)

我会尝试将所有jQuery复制到您的JS文件和running it in "no conflict" mode中。然后,如果将整个JS文件包装在不带参数的immediately invoked function expression中,则$变量不会干扰全局范围。

因此,您的文件看起来像:

(function () {
    // all of jQuery goes here

    $.noConflict();
    var $ = jQuery.noConflict();

    // your code that uses $ here
})();

在IIFE中包装所有内容会使您的$变量保持在本地,因此文件外的任何代码都无法触及该变量。这可能有点极端,但它应该有效。

编辑:我上面的解决方案不正确,因为我已经自己试过了。

实际想要做的只是确保您的jQuery版本包含在您的用户之前。然后在您的代码中,运行var myJQ = jQuery.noConflict();并使用myJQ代替代码中的$jQuerySee this example.