2009-11-18 10 views
22

Decir que tengo el siguiente plugin de jQuery:Llamar a un plugin de jQuery sin especificar ningún elemento

$.fn.myPlugin = function() { 
    //plugin code 
} 

Normalmente, se llama a un plugin en un cierto número de elementos, como por ejemplo:

$("body").myPlugin(); 

¿Hay alguna manera de llamar a mi complemento sin especificar un elemento?

He intentado llamarlo así: $.myPlugin();, pero eso no funciona.

Lo que funciona es esto: $().myPlugin();, pero ¿es esa la forma correcta de invocarlo?

Respuesta

47

El rápida forma de escribirlo es la siguiente:

$.myPlugin = function() { 
    // Plugin code 
} 

El derecho forma de escribirlo es la siguiente:

(function ($) { 
    $.extend({ 
     myPlugin: function() { 
      // plugin code 
     } 
    }); 
})(jQuery); 

Podría parecer un poco confuso al principio, pero es un patrón jQuery común.

(function($){ 
    // Code 
})(jQuery); 

Este código crea una función anónima y pide que pasa jQuery como argumento. Dentro de la función, este argumento está vinculado a $. La razón por la que esto se hace es que le permite trabajar con el $, incluso si jQuery se está ejecutando en el modo no-conflict.

La segunda parte es . Básicamente, amplía el objeto jQuery en sí, cuando se lo llama con un único argumento.

Llamando el plugin (en el rápido y el caso derecha) es:

$.myPlugin(); 
+0

Sé de ese patrón :) Simplemente no lo usé en la pregunta para evitar saturar el código.¡Pero gracias por el método extendido! –

-1

¿Es usar la colección si escribe algo diferente, como $('a').myPlugin()? Si no es así, ¿por qué lo pones en $.fn? Quizás quisiste inyectarlo en el jQuery.

Si se hace a trabajar en una colección, pero a veces una colección vacía tiene sentido, entonces creo que su invocaciones debe ser $([]) - pasar un vacío Array-jQuery le da una colección vacía; no pasar nada parece darle una colección que contiene document.

+0

No, no necesita cualquier elemento para trabajar; es por eso que necesito que se llame sin ningún elemento –

+0

Entonces, ¿debería cambiarlo a '$ .myPlugin = function()' en lugar de usar 'fn'? porque lo intenté ahora así, y de hecho puedo llamarlo con la notación que quiero: '$ .myPlugin();' –

+0

Y si uso '$ .myPlugin = function()', todavía se llamará técnicamente un 'complemento'? –

2

creo que estás buscando jQuery.extend():

jQuery.extend({ 
    func: function() { 
     alert('test'); 
    } 
}); 
$.func(); 
Cuestiones relacionadas