Question

Y at-il fonction JavaScript qui peut unifier $ fonction à la fois Prototype et jQuery?

Oui, c'est le vrai cas d'utilisation, je suis maintenant face à. Je trouve $ en fonction Prototype et $ jQuery est en conflit entre eux. Je sais que nous pourrions nous jQuery.noConflict () pour ressign $ retour au prototype, mais en le faisant, je vais devoir réécrire le code de javacript jquery spécifiques qui utilisent cette fonction $, ou ont jquery spécifique dans un bloc de code (par exemple. fonction anonyme).

Y at-il moyen plus facile, sans avoir à réécrire le code existant à la fois bibliothèque et les avoir dans une page?

Le code qui pourrait répondre à cette question peut ressembler à ceci, et vos commentaires sont très appréciés:

<script type="text/javascript" src="/path/to/prototype.js"></script>
<script type="text/javascript" src="/path/to/jquery.js"></script>
<script type="text/javascript">
/* <![CDATA[ */
var $j = jQuery.noConflict();
var $p = $; // reference to prototype's $
var $ = function(E, F){
  var isJQuery = true;

  //TODO: logic to determine which $ to use here YOUR SUGGESTION HERE ;-)

  var result = null;
  if(isJQuery){
    result = $j(E, F);
  } else { // prototype
    //TODO: code to delegate prototype $
  }

  return result;
}
/* ]]>*/
</script>

// ... any existing javacode jQuery and Prototype using $ function. 

Merci.

mise à jour :. Réécrire question plus claire

Était-ce utile?

La solution

Eh bien, tout d'abord, je peux rarement trouver les cas où les deux USEFULL des bibliothèques doivent être incluses dans la même page. Donc, vous pourriez envisager de supprimer un.
Je suppose que je suis tout à fait sûr que cela est dû à un plug-in utilisé, mais un coup d'oeil à la liste des plug-in adversaire, qu'il ya une alternative.

En second lieu, pour votre code spécifique jQuery, il est très facile de le réécrire, en utilisant l'astuce de fonction anonyme:

(function($){
  ... your code here ...
})(jQuery);

Cela fonctionne dans la plupart des cas où vous ne mettez pas les variables globales ou des méthodes plutôt que de les lier à des événements.

Autres conseils

J'ai toujours eu l'habitude de mettre tout mon code jQuery dans une fonction similaire à l'exemple de Gizmo:

jQuery(function($) {
    // jQuery code here, using $
});

est le même que le gestionnaire d'événements document.ready.

jQuery a été super de faire en sorte qu'ils jouent bien avec Prototype. Consultez cette page pour plus de détails, Éviter les conflits avec d'autres bibliothèques .

J'ai vu les deux bibliothèques utilisées dans les mêmes pages avant et il est généralement en raison des applications tierces qui sont dans vos pages qui utilisent une bibliothèque pendant que vos pages utilisent l'autre. Toutefois, si vous faites tout le développement vous, je vous suggère de coller avec l'un ou l'autre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top