Pregunta

¿Hay alguna función de JavaScript que puede unificar $ función tanto de Prototype y jQuery?

Sí, este es el caso de uso real, estoy frente ahora. Encuentro $ función en Prototype y jQuery $ en está en conflicto entre sí. Sé que nos podríamos jQuery.noConflict () para volver a ressign $ prototipo, sin embargo, al hacerlo, voy a tener que reescribir el código javacript jquery-específico que utilice esa función $, o tienen jQuery específico en un bloque de código (por ejemplo. función anónima).

¿Hay alguna manera más fácil, sin tener que volver a escribir el código existente tanto en la biblioteca y tenerlos en una página?

El código que podría responder a esta pregunta puede tener este aspecto, y su regeneración es muy apreciada:

<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. 

Gracias.

actualización . Vuelve a escribir la pregunta a ser más clara

¿Fue útil?

Solución

Bueno, en primer lugar, puedo rara vez se encuentra muy útil casos en los que las dos bibliotecas tienen que ser incluidos en la misma página. Lo que podríamos considerar quitar uno.
Supongo que esto se debe a un plug-in de uso, pero echar un vistazo a la lista de plug-in oponente, estoy seguro de que hay una alternativa.

En segundo lugar, para su código específico jQuery, es bastante fácil de volver a escribir, usando el truco función anónima:

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

Esto funcionará en la mayoría de los casos en los que no se colocan las variables o métodos globales en lugar de unirlos a los acontecimientos.

Otros consejos

Siempre tengo la costumbre de poner todo mi código jQuery en una función, de forma similar al ejemplo del aparatito:

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

este es el mismo que el controlador de eventos document.ready.

jQuery sido genial en asegurarse de que juegan bien con Prototype. Visite esta página para obtener más información, evitar conflictos con otras bibliotecas .

He visto las dos bibliotecas se utilizan en las mismas páginas que antes y es por lo general debido a las aplicaciones de terceros que se encuentran en sus páginas que utilizan una biblioteca, mientras que sus páginas utilizan el otro. Sin embargo, si usted está haciendo todo el desarrollo mismo, sugiero quedarse con uno u otro.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top