在同一页面上使用不同版本的jQuery

时间:2010-06-17 12:36:38

标签: jquery jquery-selectors

我服务的用户在我提供的页面中包含JS。我正在托管他们所包含的脚本。我的脚本对其内容进行了一些操作。如果我可以使用jQuery,我厌倦了编写自己的DOM操纵器/选择器并浪费时间来完成可以用1行代码完成的工作。

我的服务的一些用户已经在他们的页面上使用jQuery(或Prototype等),所以如果我包含jQuery则会发生冲突。因为会有版本差异,所以我不想在jQuery存在的情况下使用他们的jQuery选择器,方法。

请记住,我无法控制他们的页面,我如何包含jQuery并避免冲突?

3 个答案:

答案 0 :(得分:6)

简短版本:你不能

包括jQuery两次会导致各种各样的问题,最重要的是它会删除你添加的任何插件/功能。此外,它可能会为他们使用jQuery引入很多问题...它并没有真正考虑到存在多个版本。

.noConflict()可以解决其他库冲突问题,但您不必担心此处$,您正在重新定义jQuery对象,那是出现问题的地方。例如,它在启动时装配处理程序等,如果它被页面中的另一个版本覆盖......好吧,哦,麻烦很快就会出现。

另一个很好的例子:事件被存储/访问$.data(elem, 'events'),它使用$.cache(在这个页面上打开一个控制台,检查出来),将被重新定义< / em>,失去事件处理程序,以及理智:)

答案 1 :(得分:0)

大多数情况下我需要选择器,所以有一天我偶然发现了这个问题:Sizzle,一个纯粹的JavaScript CSS选择器引擎,可以轻松地放入主机库。

它可用于避免与任何其他Sizzle实例冲突。我很高兴我找到了这个解决方案。

答案 2 :(得分:0)

要做到这一点,首先要添加第一个jQuery版本,例如:scr =“/ jquery-1.2.3.js”然后在它下面添加:

 var jq123 = jQuery.noConflict(true);

所以从现在开始,要调用这个jQuery版本,而不是“$”,使用“jq123”,例如,我想使用这个版本的jQuery调用Lavalamp菜单函数,我会这样做:     

    jq123(function() {

        jq123("#1, #2, #3").lavaLamp({

});

    });

而不是:         $(function(){

        $("#1, #2, #3").lavaLamp({

});

    });

然后,您添加其他版本的jQuery而不做任何更改,例如:您将通常使用“$”符号调用其中的函数。 我希望这会有所帮助。