使用jquery noConflict:断言我的理解

时间:2016-09-14 11:45:51

标签: javascript jquery

我有一个网页,里面有jquery库,我的js和第三方库。

<script src="/jquery.js"></script>
<script src="/webPage.js"></script>
<script src="/thirdParty.js"></script>

webPage.js包含使用

进行网页点击事件的所有绑定
$("button").on('click',...) etc

第三方库使用以下代码行

if(window.jQuery) 
   var jcb = jQuery.noConflict();

jcb用于执行append , select etc

等简单任务

代码执行上述行$ goes for a toss and I get the error - Error "$ is not a function".

的那一刻

如果我阻止第三方库 - 页面正常工作

上述用法是否正确?他们根本不应该使用上面的代码片段。而是这个:

if(window.jQuery) 
       jcb = window.jQuery;

OR

在我的JS文件中,我应该像window.jQuery123=$.noConflict();这样,而不是关心第三方库

哪种方法是正确的?

3 个答案:

答案 0 :(得分:2)

默认情况下,无论何时调用somwhere jQuery.noConflict();$都不再可用(了解更多详细信息,请查看docs )。从现在开始,仅jQuery或示例jcb是访问jQuery的唯一方法。

jQuery("selector").html(); // works
test("selector").html();   // works NOT
$("selector").html();      // works

var test = jQuery.noConflict();

jQuery("selector").html(); // works
test("selector").html();   // works
$("selector").html();      // works NOT

您可以使用IIFEclosure打包其他代码,让它再次与$一起使用:

(function($) {
    $("selector").html();
})(jQuery);

你甚至可以自己再次$。但是,如果某些内容正在使用$,则可能会对您的第三方应用产生副作用。

window.$ = jQuery;

答案 1 :(得分:0)

如果您将代码包装在:

(function( $ ) {
  $(function() {
    // your code here
  });
})(jQuery);

第三方库不会影响您在IIFE中使用$,因为它不是全局window.$,它是一个孤立的本地实例

或者,第三方库应使用noConflict(true),以免干扰$的其他用途。我会将此报告为其库中的错误

答案 2 :(得分:0)

从第二个版本调用$ .noConflict( true )会将全局范围的jQuery变量返回到第一个版本的变量。