Query的开始--全局变量,noconflict和兼容各种js的初始化方法

这个是整个jQuery代码的开始,里面包含了对不同环境的js进行的处理,例如普通环境,Nodejs,和requiredJs的处理方法。
还有jQuery生成$, jQuery全局变量的代码和noConflict代码详解
jQuery 源码:
 
  1. (function(global, factory ){
  2. // 平时的时候module是undefined,
  3. if(typeofmodule==="object"&&typeofmodule.exports ==="object"){
  4. // For CommonJS and CommonJS-like environments where a proper window is present,
  5. // execute the factory and get jQuery
  6. // For environments that do not inherently posses a window with a document
  7. // (such as Node.js), expose a jQuery-making factory as module.exports
  8. // This accentuates the need for the creation of a real window
  9. // e.g. var jQuery = require("jquery")(window);
  10. // See ticket #14549 for more info
  11. // 如果不是undefined,说明调用了一些特殊的js文件,如Node.js或者requiredJs,
  12. // 再用到这些的时候,是需要用module.exports来处理的
  13. module.exports =global.document ?
  14. factory(global,true):// 如果是requiredJS之类的,那么是不需要把jQuery对象作为全局变量的,所以noGlobal是true
  15. function( w ){
  16. if(!w.document ){
  17. thrownewError("jQuery requires a window with a document");
  18. }
  19. return factory( w );
  20. };
  21. }else{
  22. // 这个是默认的调用方法
  23. factory(global);
  24. }
  25. // Pass this if window is not defined yet
  26. }(typeof window !=="undefined"? window :this,function( window, noGlobal ){
  27. var
  28. // Map over jQuery in case of overwrite
  29. // 获取当前的window.jQuery对象,保存起来,用于noConflict
  30. _jQuery = window.jQuery,
  31. // Map over the $ in case of overwrite
  32. // 获取当前的window.$对象,并保存起来,用于noConflict
  33. _$ = window.$;
  34. // 获取jQuery对象,并把全局变量还给原本的值
  35. // 这样做的一个好处是,如果需要用到两个版本的jQuery,那么就可以通过这个来生成两个版本的jQuery对象、
  36. // 或者如果有其他的js插件同样占用了$这个符号,那么就可以通过noConflict来还原。
  37. jQuery.noConflict =function( deep ){
  38. // 如果用noConflict的话,那么就会让出window.$对象给原本的值
  39. if( window.$ === jQuery ){
  40. window.$ = _$;
  41. }
  42. // 如果用deep的话,那么同时也会让出window.jQuery对象给原本的值
  43. if( deep && window.jQuery === jQuery ){
  44. window.jQuery = _jQuery;
  45. }
  46. return jQuery;
  47. };
  48. // Expose jQuery and $ identifiers, even in
  49. // AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
  50. // and CommonJS for browser emulators (#13566)
  51. // 如果noGlobal为null的话(反则为true),那么就把jQuery设置为全局变量来使用
  52. if(typeof noGlobal === strundefined ){
  53. window.jQuery = window.$ = jQuery;
  54. }
  55. }));
 
 
 
粘贴一点w3school的noconflict代码(略作修改)
  1. <scripttype="text/javascript"src="jquery.1.10.js"></script>
  2. <scripttype="text/javascript"src="jquery.11.js"></script>
  3. <scripttype="text/javascript">
  4. var jq = $.noConflict();
  5. // 在下面使用的$为jquery.1.10的代码
  6. // jq和jQuery使用的是1.11的代码
  7. </script>
 
 
 
或者另外一种方法
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值