Desenvolvimento

12 ago, 2009

Evitando conflitos com jQuery.noConflict()

Publicidade

O uso da biblioteca tem crescido muito, e esse crescimento faz com que os usuários criem novos plugins para atender às suas necessidades. Porém, alguns usuários que não possuem tanta experiência no uso da biblioteca jQuery buscam outras bibliotecas para suprirem as suas necessidades, usando mais de uma biblioteca JavaScript no desenvolvimento de um projeto.

Nada impede de um desenvolvedor utilizar mais de uma biblioteca da mesma linguagem em um projeto, mas ele deve ter o conhecimento de que poderão ocorrer conflitos entre as bibliotecas, ocasionando no mal funcionamento de uma delas ou até mesmo das duas.

Um dos grandes causadores de conflitos entre bibliotecas JavaScript é o uso do mesmo identificador, uma vez que as várias bibliotecas utilizadas vão tentar interpretá-lo cada uma a sua maneira.

O identificador mais utilizado entre as bibliotecas JavaScript é o $. Na verdade ele é um pseudônimo, significando no jargão técnico “alias” para o identificador da biblioteca. No caso de jQuery, o identificador utilizado foi jQuery, sendo então o $ o pseudônimo de jQuery. Com isso, é possível utilizar duas sintaxes equivalentes:

$() e jQuery()

Quando se está utilizando a biblioteca jQuery junto com outras como Prototype, MochiKit, MooTools ou outra, o uso de jQuery() elimina o risco de conflitos com as outras bibliotecas.

Uma forma de resolver conflitos, quando a biblioteca jQuery é uma delas, é utilizar a função jQuery.noConflict(). Ela também permite ao desenvolvedor criar um pseudônimo personalizado para o desenvolvimento.

Os conflitos ocorrem porque as diferentes bibliotecas, com diferentes métodos, usam uma sintaxe comum para chamar suas funcionalidades (o alias $ ou o construtor $()), o que faz com que as diferentes bibliotecas tentem interpretar o mesmo código.

Para resolver o problema dos conflitos utilizando a função citada, veja o exemplo abaixo:

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

<script type="text/javascript">

//a linha abaixo cria um novo pseudonimo $a

//que será utilizado no lugar de $ ou de jQuery()

var $a = jQuery.noConflict()


//script da biblioteca jQuery

$a(document).ready(function(){

$a('div').css('color', 'blue');

...


//script de outra bilbioteca

$('#nome-id').hide();

...

</script>

Dessa forma é possível evitar os conflitos entre as bibliotecas e manter o bom funcionamento dos scripts.