我正在使用richfaces 3_3_3.Final,我不想使用最新的jQuery http://code.jquery.com/jquery-latest.pack.js
,但它似乎有冲突。
Richfaces已经加载了一个jQuery版本(女巫不是合适的版本,似乎是1.3.2):
<script type="text/javascript" src="/project/a4j/g/3_3_3.Finalorg/richfaces/renderkit/html/scripts/jquery/jquery.js.jsf">
我可以在我的Javascript流程中使用最新版本,并允许RichFaces使用自己的版本,以及如何使用?
jQuery.noConflict()是一个很好的研究领域吗?
答案 0 :(得分:6)
是的,jQuery.noConflict
是一个好的开始,但是由于您使用的“其他库”也是jQuery,因此可能会出现并发症。
加载jQuery时,它将$
和jQuery
定义为全局变量。使用.noConflict
将“放弃对$
变量”的控制 - 意味着之前的$
,它将再次设置。如果首先加载v1.3.2并且接下来加载最新包(现在为1.6.4),.noConflict
将使$
引用v1.3.2,但jQuery
仍会引用1.6.4。
基本上,在加载最新包之前,需要对jQuery进行别名。 See my fiddle used to simulate your situation(也粘贴在下方)。
<script type="text/javascript">
//alias v.1.3.2
var $132 = $;
</script>
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.pack.js"></script>
<script type="text/javascript">
//alias v1.6.4
var $164 = $, jQuery164 = $;
//reset original variables to v1.3.2
$ = jQuery = $132;
console.log("v1.3.2: ", $().jquery, jQuery().jquery)
console.log("v1.6.4: ", $164().jquery, jQuery164().jquery)
$('div') //selected using v1.3.2
$164('div') //selected using v1.6.4
</script>
加载1.6.4后,您需要对其进行别名并将$
和jQuery
设置回1.3.2对象。这不使用.noConflict
,因为它基本上做同样的事情。 RichFaces将继续使用1.3.2工作,您将根据别名1.6.4版本编写代码。在我的小提琴中,这意味着使用$164
而不是$
。我希望这是有道理的。我相信小提琴会更清晰。
最后,使用jquery-latest.pack.js
开发代码是可以的,但您不应该在生产网站上使用它。原因是因为在未来的某个时刻,jQuery将会更新。如果您要加载最新的包,那些更新可能会破坏您网站的功能,而您甚至不知道它。选择一个版本并坚持使用它更安全,只有在您确认您的网站将继续正常运行时才进行升级。