javascript - jquery noConflict的用法: Assert my Understanding

标签 javascript jquery

我有一个网页,其中有 jquery 库、我的 js 和第 3 方库。

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

webPage.js 包含使用

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

第三方库使用以下代码行

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

jcb 然后用于执行简单的任务,例如 append 、 select 等

代码执行上述行的那一刻,$ 进行了抛掷,我得到了错误 - 错误“$ 不是函数”。

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

以上用法正确吗?他们根本不应该使用上面的代码片段。相反:

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

在我的 JS 文件中,我应该使用类似 window.jQuery123=$.noConflict(); 的内容,而不用担心第三方库

哪种方法是正确的?

最佳答案

默认情况下,每当调用 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;

关于javascript - jquery noConflict的用法: Assert my Understanding,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39489623/

相关文章:

javascript - 如何将鼠标事件添加到 div 集并从数据库表单单击 div 加载数据?

javascript - ExtJS:4.2.1 中的网格过滤(升级损坏)

php - 在 PHP foreach 循环中使用 jQuery 函数

javascript - 双击 d3 删除路径

javascript - 每个圆不同的颜色 - D3 圆包

javascript - 如何在上下文菜单项上打开 default_popup 单击 chrome 扩展

javascript - Angular JS : How to load js files in partials

javascript - 替代支持 eventData 的 jQuery .toggle() 方法?

javascript - .attr ("href") 包含包含逗号的链接

javascript - Three.js GLSL 着色器无法编译