Pergunta

Existe alguma função JavaScript que pode unificar $ função de ambos Prototype e jQuery?

Sim, este é o caso de uso real que eu estou enfrentando agora. Acho $ função em Prototype e US $ em jQuery está em conflito entre si. Eu sei que poderíamos nos jQuery.noConflict () para ressign $ de volta para Prototype, no entanto, ao fazer isso, eu vou ter que reescrever o código Javacript específicas de jquery que o uso que $ função, ou ter jquery específico em um bloco de código (ex. anônima função).

Existe alguma maneira mais fácil, sem ter que reescrever o código existente em ambas biblioteca e tê-los em uma página?

O código que poderia responder a esta pergunta pode ser parecido com este, e seu feedback é muito apreciado:

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

Graças.

update :. Questão Rewrite para ser mais claro

Foi útil?

Solução

Bem, primeiro de tudo, eu raramente pode encontrar útil casos em que ambas as bibliotecas têm de ser incluídos na mesma página. Então você pode considerar para remover um.
Eu acho que isso é devido a um plug-in de uso, mas ter um olhar para o adversário plug-in lista, eu tenho certeza que há uma alternativa.

Em segundo lugar, para o seu código específico jQuery, é bastante fácil de reescrevê-lo, usando o truque função anônima:

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

Isto irá funcionar na maioria dos casos em que você não colocar variáveis ??ou métodos globais em vez de ligá-los a eventos.

Outras dicas

Eu sempre tenho o hábito de colocar todo o código meu jQuery em uma função, semelhante ao exemplo do aparelho:

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

Este é o mesmo que o manipulador de eventos document.ready.

sido grande do jQuery sobre certificando-se que eles jogam bem com Prototype. Consulte esta página para obter mais informações, Evitando conflitos com outras bibliotecas .

Eu vi ambas as bibliotecas utilizadas nas mesmas páginas antes e geralmente é por causa de aplicativos de terceiros que estão em suas páginas que usam uma biblioteca, enquanto suas páginas usar o outro. No entanto, se você está fazendo todo o desenvolvimento mesmo, sugiro ficar com um ou o outro.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top