2010-02-06 21 views
60

Estamos cambiando de MooTools a jQuery en el trabajo. Tengo un compañero de trabajo que me dijo que nunca use $ como el prefijo al usar un método jQuery (si lo entendí correctamente). Dijo que, en cambio, la forma más apropiada o más segura (no lo seguí realmente) era usar jQuery..

Por lo tanto, en lugar de $.plugin(), se debe usar jQuery.plugin(), por ejemplo.

¿Por qué sería ese el caso? ¿Qué distinción está haciendo con $/jQuery? ¿Debería olvidarme del signo de dólar como mi accesorio? Solo en ciertas circunstancias?

+0

posible duplicado de [jQuery and MooTools Conflict] (http://stackoverflow.com/questions/2810399/jquery-and-mootools-conflict) –

+0

posible duplicado de [¿Cuál es la diferencia entre estas funciones jQuery ready?] (http://stackoverflow.com/questions/2662778/what-is-the-difference-between-these-jquery-ready-functions) –

Respuesta

74

¿Por qué sería ese el caso? ¿Es correcta su distinción $/jQuery?

Porque casi cada biblioteca de JavaScript define una función llamada $. Cuando tiene muchas bibliotecas en un documento, pueden aparecer conflictos. Si está seguro de que jQuery es y siempre será el único script que define esa función, no tendría nada en contra de usar $.

jQuery define una buena solución para resolver conflictos: jQuery.noConflict. Al usar esta función, puede definir su propio nombre, mediante el cual se podrá acceder a jQuery, p.

var $jq = jQuery.noConflict(true); 

llama a esta función resultará en la restauración de los valores previos de las variables $ y jQuery cuando ya existían antes de la inicialización de jQuery. No recuerdo si otras bibliotecas intentan resolver conflictos de nombres.

Si desea usar $ en lugar de jQuery todo el tiempo, puede ejecutar su código en un ámbito privado separado que contiene la definición de $ mediante el uso de una función de invocación automática.

(function($){ 
    // your code goes here 
    $("body").append("<p>Hello World!</p>"); 
})(jQuery); // or even jQuery.noConflict() 
+10

Solo para destacar la terminología: Lo que usted presentó no es un cierre, sino solo un yo -invitación de la función. Un cierre es cuando define una función dentro de otra función y la devuelve. –

+0

Mi error. No sé lo que estaba pensando mientras escribía mi respuesta. Cambió el texto. – Rafael

+2

+1 para el IIFE (expresión de función invocada inmediatamente). IMO esto es preferible al uso de 'noConflict' ya que el alcance está claramente definido. – ach

10

$ es alias de jQuery y podrían, en teoría, tener un alias a otra cosa en otra biblioteca o script incluido que puede llevar a confusión o peor. Si solo está usando jquery, usar $ debería estar bien.

3

Es para evitar conflictos con otras bibliotecas como Prototype que usa los mismos $.

Prefiero $, y no hay problema usándolo si solo está usando Jquery.

3

Además de las otras respuestas sobre conflictos con otras bibliotecas, un nombre de variable siempre debe describir la variable. jQuery es un nombre mucho más descriptivo para una variable que $.