1

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

有没有一种通用的方法可以做到这一点,这样我就可以将其他库添加到我的项目中而不会与全局命名空间发生冲突?

4

1 回答 1

1

我会尝试将所有 jQuery 复制到您的 JS 文件中并在“无冲突”模式下运行它。然后,如果您将整个 JS 文件包装在一个立即调用的不带参数的函数表达式中,您的$变量将不会干扰全局范围。

因此,您的文件将类似于:

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

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

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

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

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

真正想要做的只是确保您的 jQuery 版本包含在您的用户之前。然后在您的代码中,代替或在您的代码中运行var myJQ = jQuery.noConflict();和使用。请参阅此示例。myJQ$jQuery

于 2012-08-02T19:34:56.947 回答