我正在使用Magento网站。我遇到了一个让Magento的prototype.js与jQuery玩得很好的问题。我已经读过我所有的jQuery都需要使用jQuery.noConflict();我已经完成但仍有一些问题。我已经看到一些关闭括号的函数后跟(jQuery)。
我想知道这是为了什么,如果我需要将其更改为(jQuery.noConflict())?
答案 0 :(得分:3)
只要在该点之前(以及包含JQuery库之后)调用(jQuery)
,就无需将(jQuery.noConflict())
更改为jQuery.noConflict()
。
如您所知,当您在非冲突模式下使用jQuery时,应使用jQuery
而不是$
。
但是你可以在立即调用的函数表达式(IIFE)中的代码中使用$
而不是jQuery
,如下所示:
(function($) {
// Code here can use $, instead of jQuery.
})(jQuery);
您可以在IIFE中定义匿名函数并立即调用它。在上面的代码中,jQuery
对象作为参数传递给匿名函数,由于参数名为$
,$
表示函数内的jQuery
对象
此外,jQuery
对象作为第一个参数传递给文档就绪事件的回调函数,因此您可以执行以下操作:
jQuery(function($) {
// Code here can use $, instead of jQuery.
});
与以下内容相同:
jQuery(document).ready(function($) {
// Code here can use $, instead of jQuery.
});
请注意,在IIFE内用var
声明的变量不是全局变量。这通常是一件好事,也是使用IIFE的另一个原因。如果你想在IIFE中声明一个全局变量,你应该将它称为window
对象的属性。
<script type="text/javascript">
var a = 1; // This is a global variable.
(function($) {
var b = 2; // This is NOT a global variable.
window.c = 3; // This is a global variable.
})(jQuery);
<script>