The
noConflict function in jQuery lets you use multiple versions of jQuery on the same page or load other libraries that also have a
$ function.
The code in jQuery 1.7.2
noConflict: function( deep ) {
if ( window.$ === jQuery ) {
window.$ = _$;
}
if ( deep && window.jQuery === jQuery ) {
window.jQuery = _jQuery;
}
return jQuery;
}The code is quite easy to understand, once you know that when jQuery is loaded it puts backups of
window.$ and
window.jQuery into
_$ and
_jQuery.
// Map over jQuery in case of overwrite
_jQuery = window.jQuery,
// Map over the $ in case of overwrite
_$ = window.$,
Return jQuery
This returns the jQuery function that jQuery uses internally. This way, when you use
$.noConflict(true), you can use the return value as your
$ function - because
window.jQuery will be overwritten.
Why the if's?
If
noConflict wouldn't check that the global object actually stores a reference to jQuery it could overwrite another library. Imagine you
- Load jQuery
- Call noConflict
- Load another
$ function library - Accidentally call noConflict again
This would set the
$ function of the other library to undefined. (You're right if you think that this is not a very likely scenario. Some earlier version of jQuery didn't even do this check.)
window.$ is compared with
jQuery rather than
$ because internally jQuery only uses the local
jQuery variable.
$ is only used when exposing the jQuery object to
window.