我有一个网页,里面有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();
这样,而不是关心第三方库
哪种方法是正确的?
答案 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
您可以使用IIFE
或closure
打包其他代码,让它再次与$
一起使用:
(function($) {
$("selector").html();
})(jQuery);
你甚至可以自己再次$
。但是,如果某些内容正在使用$
,则可能会对您的第三方应用产生副作用。
window.$ = jQuery;
答案 1 :(得分:0)
如果您将代码包装在:
(function( $ ) {
$(function() {
// your code here
});
})(jQuery);
第三方库不会影响您在IIFE中使用$
,因为它不是全局window.$
,它是一个孤立的本地实例
或者,第三方库应使用noConflict(true)
,以免干扰$
的其他用途。我会将此报告为其库中的错误
答案 2 :(得分:0)
从第二个版本调用$ .noConflict( true )会将全局范围的jQuery变量返回到第一个版本的变量。