Vous pouvez le faire avec noConflict(true)
:
var myJQuery = jQuery.noConflict(true);
Le paramètre true
indique jQuery pour libérer le symbole jQuery
en plus du symbole $
. Ajoutez simplement ceci à la fin du fichier jQuery.js que vous incorporez dans le contrôle.
Le script jQuery est intelligent à propos des conflits. La première chose qu'il fait est de saisir quelle que soit la valeur actuelle des deux $
et jQuery
et de les écureuils afin qu'il puisse les restaurer plus tard si vous le demandez. Donc, si votre script est chargé en premier, ni $
ni jQuery
ne seront définis et le nouveau peut les avoir. Si votre script est chargé en second lieu, restaure$
et jQuery
.
Exemple:
Supposons que vous utilisez la dernière (v1.5.1), mais l'auteur de la page utilise les plus 1.4.4. En effet, en virant de bord var jq151 = jQuery.noConflict(true);
à la fin du fichier 1.5.1, vous faites ceci:
<script src='jquery-1.5.1.min.js'></script>
<script>var jq151 = jQuery.noConflict(true);</script>
... sauf qu'il serait tous dans une balise de script. Ainsi, deux possibilités:
1) Ils vont d'abord:
<script src='jquery-1.4.4.min.js'></script>
<script src='jquery-1.5.1.min.js'></script>
<script>var jq151 = jQuery.noConflict(true);</script>
Live example
2) Vous allez d'abord:
<script src='jquery-1.5.1.min.js'></script>
<script>var jq151 = jQuery.noConflict(true);</script>
<script src='jquery-1.4.4.min.js'></script>
Live example
De toute façon, à la fois jQuery
et $
finissent pointi ng à leur version 1.4.4, et jq151
finit pointant vers votre version 1.5.1.Peut-être légèrement hors-sujet, mais pour tous ceux qui pensent que c'est un peu magique, c'est vraiment très facile. :-) Voici un script qui va redéfinir foo
, mais rétablir la définition précédente si vous demandez à:
// The script
(function() {
var globalObject = this, // Or just use `window` on browsers
oldfoo,
ourfoo;
oldfoo = globalObject.foo;
ourfoo = globalObject.foo = {
version: "new",
restorePrevious: restorePrevious
};
function restorePrevious() {
globalObject.foo = oldfoo;
return ourfoo;
}
})();
Example with foo
defined before the above
Example with foo
defined after the above (si vous vous demandez pourquoi cela fonctionne malgré var foo
être après le script, here's some reading le lire sur le pauvre, mal compris var
)
A propos des plug-ins: Vous avez demandé ci-dessous à propos des plug-ins. Plug-ins s'enregistrent en attribuant leurs fonctions aux propriétés sur jQuery.fn
et (dans certains cas) jQuery
, comme ceci:
jQuery.fn.makeFoo = function() {
};
Avec ce qui précède, vous pouvez accéder à une fonction makeFoo
sur les instances jQuery (par exemple, $('foo').makeFoo();
). Un bien écrit plug-in veillera à ce qu'elle joue bien avec les deux noConflict()
et noConflict(true)
en utilisant cette structure:
(function($) {
$.fn.makeFoo = function() {
$(this).addClass("foo");
};
})(jQuery);
... ou d'un tel. (Avec ce qui précède, nous avions jamais utiliser jQuery
pour se référer à jQuery dans le corps de la fonction. Si nous voulions, nous pourrions ajouter var jQuery = $;
en haut.)
qui définit une fonction anonyme et appelle immédiatement, en passant la valeur globale actuelle pour jQuery
. Il reçoit cela comme argument, et donc dans la fonction le symbole $
sera toujours être l'instance jQuery
qu'il a passé en lui-même. Il peut utiliser librement $
sachant qu'il fait référence à la version de jQuery sur laquelle il est enregistré. Un seul plug-in assez bien écrit peut supposer que jQuery
sera toujours le même (par exemple, ne joue qu'avec juxtaposer noConflict()
et pas avec noConflict(true)
). Vous pouvez les réparer, cependant. Si vous rencontrez un, faire une copie de celui-ci et de mettre
(function($) {
var jQuery = $;
... en haut et
})(jQuery);
... au fond. 99% du temps, ça va le faire se comporter. Si vous souhaitez utiliser des plug-ins avec votre instance jQuery intégrée, il est préférable de les inclure dans votre fichier personnalisé.Ainsi, le contenu du fichier deviennent:
- Le script jQuery
- (script plug-in)
- (script plug-in)
- ...
- Votre
var jq151 = jQuery.noConflict(true);
Je ne pense pas qu'il restaure ce qui peut avoir été la valeur de "$" avant, comme l'OP semble souhaiter – mattsven
@ motionman95: C'est * exactement * ce qu'il fait, voir les documents liés pour plus de détails. –
@Crowder Ah je vois. – mattsven