33 votes

À l'aide de JQuery et Prototype dans la même page

Plusieurs de mes pages, utilisez les deux JQuery et Protoype. Depuis que j'ai mis à niveau vers la version 1.3 de JQuery, ce qui semble être à l'origine des problèmes, parce que les deux bibliothèques de définir une fonction nommée '$'.

JQuery fournit une fonction noConflict() qui abandonne le contrôle de dollars à d'autres bibliothèques susceptibles de l'utiliser. Il semble donc que j'ai besoin de passer par toutes mes pages qui ressemblent à ceci:

<head>      
    <script type="text/javascript" src="/obp/js/prototype.js"></script>
    <script type="text/javascript" src="/obp/js/jquery.js"></script>
</head>

et de les changer pour ressembler à ceci:

<head>      
    <script type="text/javascript" src="/obp/js/prototype.js"></script>
    <script type="text/javascript" src="/obp/js/jquery.js"></script>
    <script type="text/javascript">
        jQuery.noConflict();
        var $j = jQuery;
    </script>
</head>

Je dois être en mesure d'utiliser '$' de Prototype et '$j' (ou 'jQuery') pour JQuery. Je ne suis pas entièrement satisfait sur la duplication de ces 2 lignes de code dans chaque page, et s'attendre à ce que à un certain moment, quelqu'un est susceptible d'oublier de les ajouter à une nouvelle page. Je préfère être en mesure de faire ce qui suit

  • Créer un fichier jquery-noconflict.js qui "comprend" jquery.js et les 2 lignes de code ci-dessus
  • Importer jquery-noconflict.js (au lieu de jquery.js) dans toutes mes JSP/pages HTML

Cependant, je ne suis pas sûr si il est possible d'inclure un fichier JS dans un autre, de la manière que j'ai décrite? Bien sûr, une autre solution consiste simplement à ajouter les 2 lignes de code ci-dessus pour jquery.js directement, mais si je fais ça je vais avoir besoin de vous rappeler de le faire à chaque fois que je l'ai mise à niveau de JQuery.

19voto

jmonteiro Points 773

Actuellement, vous pouvez faire quelque chose comme ceci:

<head>          
    <script type="text/javascript" src="/obp/js/prototype.js"></script>
    <script type="text/javascript" src="/obp/js/jquery.js"></script>
    <script type="text/javascript">
        var $j = jQuery.noConflict();
    </script>
</head>

Ensuite, utilisez jQuery $j() et du Prototype $().

5voto

Jonathan Sampson Points 121800

Il semblerait que la plupart de réponse simple serait de mordre la balle et inclure votre noConflict lignes. Bien sûr, si vos pages ne sont pas partagé un en-tête, cette solution pourrait ne pas être le meilleur.

4voto

AJCE Points 41

Cette solution a bien fonctionné:

jQuery.noConflict();
var $j = jQuery;

Maintenant, utilisez $j à la place de $ pour votre jQuery, comme:

$j(document).ready(function() {
    $j('#div_id').innerfade({
         // some stuff
    });
});

3voto

Nick Points 8126

Je suis allé à travers ce pendant un certain temps. Il est très ennuyeux et à la fin j'ai décidé d'éliminer tous mes vieux Prototype de trucs et de le remplacer avec jQuery. J'aime la façon dont Prototype poignées Ajax tâches, mais ce n'était pas la peine de l'échange du maintien de tous les pas de conflit choses.

2voto

Chris Points 29

Pourriez-vous ne pas les inclure la jQuery = noConflict() code dans le jquery.js fichier source? Pourquoi aurait-il besoin d'être définis de cette façon?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X