Como usar jQuery sem conflito com outras bibliotecas JavaScript
Estava trabalhando em uma página que já fazia o uso da biblioteca jQuery para apresentação de alguns componentes, contudo surgiu a necessidade de usar ajax nessa mesma página. Apesar da jQuery possuir um bom suporte para ajax, eu gosto muito também da prototype, pois além de ter mais prática (com ajax), também já tenho algumas customizações prontas.
Após incluir a prototype e testar a página, percebi que um erro de JavaScript estava ocorrendo, no começo achei que a causa do erro era em razão de uma função – usando a prototype – que eu tinha acabado de fazer, mas depois usando o bem dito firebug e fazendo alguns debugs, percebi que o erro era mesmo em um conflito entre a jQuery e a prototype.
O problema ocorre, pois as duas bibliotecas fazem o uso da função “$()” para acessar as suas funções, o que acaba gerando o conflito.
A biblioteca jQuery fornece algumas maneiras de resolver isso, mas todas giram em torno da função jQuery.noConflict(). A solução que oferece o maior custo x benefício na minha opinião, é a que eu não preciso alterar os meus métodos já existentes, ou seja, não precisaria ter que fazer isso:
var $j = jQuery.noConflict();
$j("div").hide();
No caso acima, se eu já tivesse N funções usando jQuery, eu precisaria fazer uma refatoração do meu código para mudar o método “chamador” das minhas funções de $() para $j(), isso geraria algum tempo perdido com muitas mudanças e muitos testes. A solução que encontrei pede apenas para que as funções fiquem dentro da document ready area da jQuery, então ficaria mais ou menos assim:
<script src="prototype.js"></script>
<script src="jquery.js"></script>
<script>
jQuery.noConflict();
// Put all your code in your document ready areajQuery(document).ready(function($){
// Do jQuery stuff using $$("div").hide();
});
// Use Prototype with $(...), etc.$('someid').hide();
</script>
Da maneira acima eu não precisaria mudar nenhuma função já existente, bastaria apenas incluí-las dentro do bloco indicado.
Segundo a documentação, essa seria a solução mais adequada na maioria dos casos.
Se você gostou desse tópico, por favor considere deixar um comentário ou se inscreva no feed e tenha no futuro todos os tópicos entregues diretamente no seu agregador.








Olá!
Crio templates para o Blogger, mas sou autodidata completamente leiga com scripts, mas instalei um script “Page Peel” em um template e, não faço a menor idéia de porque tenha simplesmente parado de funcionar (olha não rí que eu to vendo) rsss
Caso voce possa me ajudar a entender o conflito que está havendo, ficarei grata. Caso não queira resposnder, fico grata do mesmo jeito
o template está em:
http://www.mamanestes1.blogspot.com
Um abraço!
Mamanunes
Ótimo artigo cara me ajudou muito parabéns!
Marcos, obrigado pela dica. Há algum tempo vinha sofrendo com esses conflito de $(). Seu tutorial foi de grande ajuda. Obrigado. Sucesso pra você.
Gando abraço.
Esse método ainda é falho.
E por que?
pq é falho? traga a solução. o cara entra e só fala que é falho mas nao ajuda em merda nenhuma.
Cara valeu muito, esse teu post, foi o único que deu a uma solução que realmente funciona, estava usando prototype e depois tive de inclur jquery e após muita pesquisa o único que teve um solução que funcionou foi a tua.
Fiquei uma tarde tentando entender porque meus codigos não funcionavam, mas depois de ler este artigo, funfo tudo direitinho.
Aleluiaaaaaaaaaaaa
Tava usando o “prototype” ai coloquei um outro código usando o “jQuery” mais a partir desse ponto o “prototype” tinha parado de funcionar…
Foi só colocar isso dentro do código que funcionou os 2.
var $j = jQuery.noConflict();
$j(“div”).hide();
Ai muda o valor do jQuery que é $ para $j
Tão simples e eu tava louco achando que iria ter que tirar um e só deixar o outro!
Valeu tu me salvou! xD
esta solução foi perfeita!
It certainly is not common to obtain this type of unique outtake. A lot of blog owners usually are not as concentrated…
estou com problemas com o prototype, não consigo encontrar a solução sempre dá erro nessas linhas:
element.attachEvent(“on” + name, wrapper);
element.fireEvent(event.eventType, event);
coloquei o código que foi falado aqui mais um funciona e outro para de funcionar. Agradeço desde já pela atenção
Mano do Céu !!!!!!!!
Salvou meu dia !!!!!!!!
te pagaria uma caixa de cerveja !!!!!
huahuahuahuahua
Deus te abençoe
Muito bom! nem terminei d eler e to elogiando!!
Vai me ajudar muito!
Não funcionou. Tenho um slider e um lightbox pra rodar na mesma página e ou funciona um ou o outro. nunca os dois.
Sou meio novo com jQuery e fiquei na dúvida de onde exatamente eu deveria inserir essas linhas do “noConflict”. Dentro do jQuery, do prototype ou no head do documento?
Todas as tentativas que eu fiz, com ambos os métodos descritos, não deu muito certo. Ou só 1 funcionava, ou os 2 paravam. Não consegui fazer os 2 funcionarem. Help please!
Rafael, isso vai te ajudar:
http://api.jquery.com/jQuery.noConflict/
Consegui fazer funcionar renomeando todas as minhas funções $ que estavam em conflito, para outra variável que estava sendo atribuída. No caso $j e consegui fazer funcionar.
Vou dar uma lida nesse link que vc passou pra entender melhor o esquema. Obrigado, Marcus!
Olá, eu estou fazendo um blog com WordPress e estou tendo problemas com os plugins que instalei. Já andei pesquisando e pelo o que eu entendi é conflito de jquery. Já olhei vários tutoriais falando sobre isso mas não consegui resolver, eu simplesmente não sei onde que tenho que colocar esse código… Tenho muitas páginas, e já fiz vários testes e não funcionou… Acredito que não tenho colocado no lugar certo… Vc pode me ajudar? ;-)
Opa achei bastante interessante, mais não funcionou para o meu caso
ele esta em conflito com banners rotativos
o erro é este
var as = $(‘links’).getElementsByTagName(‘a’);
att.
Brambilla
OK
resolvi o problema
att.
Brambilla
Cara … fiz o que você informou no segundo exemplo.
Mas o que ocorreu foi: minha página não carrega nada. Nem mesmo o conteúdo.
O que pode ser?
Cara … fiz o que você informou no segundo exemplo.
Mas o que ocorreu foi: minha página não carrega nada. Nem mesmo o conteúdo.
O que poderia ocasionar isso?
Fiz do primeiro modo e funcionou. Estava usando o lightbox e slider vertical com um código bem simples, dai alterei esse código mesmo, só dei um CTRLF em $( e mandei substituir por $j(.
Funcionou na primeira! Valeu mesmo cara, abraço!
não entendi nada, não especifica onde colar, e que área especificada é essa? Não me judou muito porque não sei nada de jquery. :|