为什么我们必须在jQuery中使用$ .noConflict()?

时间:2017-10-02 05:45:20

标签: javascript jquery clientscript

我知道我们正在使用$ .noConflict()来克服其他插件冲突。 例如,如果某个新插件使用$符号作为变量,它将覆盖。所以,我们正在使用如下

var $j=$.noConflict();

但是,我怀疑在这里,我们可以使用下面的代码本身归档这个为什么$ .noConflict();需要的?

 var $j=$;

先谢谢了。请解释一下主要的不同

2 个答案:

答案 0 :(得分:3)

在这里您可以获得有关原因的详细信息:

  

许多JavaScript库只使用$作为函数或变量名   就像jQuery一样。在jQuery的例子中,$只是jQuery的别名,所以   无需使用$即可使用所有功能。如果你需要使用   与jQuery一起使用的另一个JavaScript库,返回$ back的控件   通过调用$ .noConflict()到另一个库。 的旧引用   在jQuery初始化期间保存 $; noConflict()只是恢复   的它们。

它来自jQuery,还有更多信息:https://api.jquery.com/jquery.noconflict/

评论后更新

如果您搜索noConflict,则可以从jQuery代码https://code.jquery.com/jquery-1.10.2.js找到

noConflict: function( deep ) {
        if ( window.$ === jQuery ) {
            window.$ = _$;
        }

        if ( deep && window.jQuery === jQuery ) {
            window.jQuery = _jQuery;
        }

        return jQuery;
    },

简单来说:这会检查是否已使用全局$或全局jQuery。无论哪种方式,它将返回jQuery。因此,您var $j=$; $可能已经存在冲突。 noConflict()就是您所需要的。

答案 1 :(得分:0)

如果您需要使用另一个JavaScript库以及 jQuery ,请通过调用$ .noConflict()将$的控制权返回到其他库。此技术是与 .ready()方法对 jQuery 对象进行别名的功能特别有效,因为在传递给 .ready()的回调中,您可以如果你愿意,可以使用$而不用担心以后的冲突

以不同方式使用noConflict的示例

输入01     var j = jQuery.noConflict();

// Do something with jQuery
j( "div p" ).hide();

// Do something with another library's $()
$( "content" ).style.display = "none";

输入02

jQuery.noConflict();
(function( $ ) {
  $(function() {
    // More code using $ as alias to jQuery
  });
})(jQuery);