我服务的用户在我提供的页面中包含JS。我正在托管他们所包含的脚本。我的脚本对其内容进行了一些操作。如果我可以使用jQuery,我厌倦了编写自己的DOM操纵器/选择器并浪费时间来完成可以用1行代码完成的工作。
我的服务的一些用户已经在他们的页面上使用jQuery(或Prototype等),所以如果我包含jQuery则会发生冲突。因为会有版本差异,所以我不想在jQuery存在的情况下使用他们的jQuery选择器,方法。
请记住,我无法控制他们的页面,我如何包含jQuery并避免冲突?
答案 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而不做任何更改,例如:您将通常使用“$”符号调用其中的函数。 我希望这会有所帮助。