Appeler un plugin jQuery sans spécifier d'éléments

Disons que j'ai le plugin jQuery suivant:

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

Normalement, vous appelez un plugin sur un certain nombre d'éléments, comme tel:

$("body").myPlugin();

Est-il possible d'appeler mon plugin sans spécifier d'élément?

J'ai essayé de l'appeler comme tel: $.myPlugin();, mais qui ne fonctionne pas.

Ce qui fonctionne c'est ceci: $().myPlugin();, mais est-ce la bonne façon de l'invoquer?

23
demandé sur Andreas Grech 2009-11-18 22:17:33

3 réponses

La façon rapide de l'écrire est la suivante:

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

La façon droite de l'écrire est la suivante:

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

Cela peut sembler un peu déroutant au début, mais c'est un modèle jQuery commun.

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

Ce code crée une fonction anonyme et l'appelle en passant {[4] } comme argument. L'intérieur de la fonction, cet argument est lié à $. La raison pour laquelle cela est fait qu'il vous permet de travailler avec le $ même si jQuery est en cours d'exécution dans no-conflict mode.

La deuxième partie est $.extend. Il étend fondamentalement l'objet jQuery lui-même, lorsqu'il est appelé avec un seul argument.

Appeler le plugin (dans le cas rapide et le bon) est:

$.myPlugin();
47
répondu Emil Ivanov 2009-11-18 19:43:09

Je pense que vous cherchez jQuery.extension ():

jQuery.extend({
    func: function() {
        alert('test');
    }
});
$.func();
2
répondu I.devries 2009-11-18 19:45:06

Ne utiliser la collection si vous écrivez quelque chose de différent, comme $('a').myPlugin()? Si ce n'est pas le cas, alors pourquoi le mettez-vous dans $.fn? Peut - être que vous vouliez l'injecter dans jQuery lui-même.

Si fait travailler sur une collection, mais parfois une collection vide a du sens, alors je pense que votre invocant devrait être $([]) - passer un Array vide à jQuery Vous donne une collection vide; passer rien du tout semble vous donner une collection contenant document.

-1
répondu hobbs 2009-11-18 19:24:40