Javascript 如何在jQuery.noConflict()之后访问jQuery;-没有名称空间
我现在有大麻烦了。我们有一个巨大的JS库,我需要维护。它在内部使用jQuery 1.6.2。 我们安装库的客户端使用jQuery 1.3.4和fancybox覆盖插件。 加载这两个后,他只需输入一个Javascript 如何在jQuery.noConflict()之后访问jQuery;-没有名称空间,javascript,jquery,Javascript,Jquery,我现在有大麻烦了。我们有一个巨大的JS库,我需要维护。它在内部使用jQuery 1.6.2。 我们安装库的客户端使用jQuery 1.3.4和fancybox覆盖插件。 加载这两个后,他只需输入一个 jQuery.noConflict(); 但是没有将jQuery保存到变量(名称空间) 现在我需要访问他的fancybox,但是如果我使用 $.fancybox({...}) 或 在这两种情况下,我都得到一个“不是方法错误” 我可以在本地机器上复制错误,如果没有jQuery.noConflict
jQuery.noConflict();
但是没有将jQuery保存到变量(名称空间)
现在我需要访问他的fancybox,但是如果我使用
$.fancybox({...})
或
在这两种情况下,我都得到一个“不是方法错误”
我可以在本地机器上复制错误,如果没有jQuery.noConflict(),错误就不会出现;声明
我们也在使用jQuery进行无冲突操作,但我们将其保存到另一个变量,即
jq162 = jQuery.noConflict();
问题是客户当然不愿意更改任何代码。
在这个语句之后和加载1.6.2之后,我有没有办法访问他的jQuery/Fancy
先谢谢你
更新
脚本按以下顺序加载:
//客户
jQuery.noConflict()代码>
$jq=jQuery.noConflict()代码>它会起作用,但现在这不受我的影响
在6。MyScript我需要从2访问fancybox
有什么想法吗?应该没问题。您必须在客户端脚本之后加载脚本(如果您首先加载脚本,则不会有任何问题,jquery是命名空间的,客户端版本将与插件一起位于jquery
)
因此,在加载脚本之前,只需为其jQuery
对象命名名称:
<script>
jq132 = jQuery;
</script>
<script src="yourScripts"></script>
<script>
jq162 = jQuery.noConflict();
console.log(jq132.fancybox);
</script>
jq132=jQuery;
jq162=jQuery.noConflict();
console.log(jq132.fancybox);
更新
根据你的更新,你想做的是不可能的。不再有对jQuery/插件实例的可访问引用(除非fancybox意外泄漏了一个全局引用,对此我深表怀疑)。我不知道fancybox,尽管它的功能可能不是特定于实例的。因此,将fancybox重新连接到您的jquery版本是可能的,它将能够执行所有必要的操作。然而,我所说的关于参考文献的话仍然是正确的
显然,添加一些您建议的字符(或其他类似的方式)可以解决问题。但如果这是不可能的,那么你的客户将不得不意识到这一点。如果你简单地要求他们在相同的条件下访问自己的插件,也就是说,不改变代码,这就足够证明了
他们可能应该对整个项目进行长期而艰苦的思考。必须加载同一产品的三个不同版本是一种迹象,表明某些东西非常非常错误。非常好的主意。不幸的是,这并不是那么容易,因为客户端已经加载了2个不同的jQuery版本,1.4.2和1.2.6,这是liferay所需要的。在这两者之间,他调用“jQuery.noConflict();”,但不使用名称空间。然后我来了:)@frankblizzard,我不明白。您现在提到了四个版本。您能否澄清加载的确切内容以及顺序。好吧,没关系,最终客户能够为他的jquery命名,case closed。
<script>
jq132 = jQuery;
</script>
<script src="yourScripts"></script>
<script>
jq162 = jQuery.noConflict();
console.log(jq132.fancybox);
</script>