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

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

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

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

简短版: 你不能

包括jQuery两次会导致各种各样的问题,最重要的是它会删除你添加的任何插件/function。 此外,它可能会为他们使用jQuery带来很多问题…它并不是真正考虑到多个版本的设计。

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

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

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

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

为此,首先添加第一个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而不做任何更改,例如:您将使用“$”符号正常调用函数。 我希望这有帮助。