Comment créer une fonction jQuery (une nouvelle méthode jQuery ou plugin)?

je sais qu'en JavaScript la syntaxe est la suivante:

function myfunction(param){
  //some code
}

Est-il possible de déclarer une fonction jQuery qui peut être ajouté à un élément? Par exemple:

$('#my_div').myfunction()
176
demandé sur multimediaxp 2012-08-23 17:51:04

13 réponses

De la Docs :

(function( $ ){
   $.fn.myfunction = function() {
      alert('hello world');
      return this;
   }; 
})( jQuery );

Puis tu fais

$('#my_div').myfunction();
246
répondu Candide 2014-01-27 17:00:41

malgré toutes les réponses que vous avez déjà reçues, il est intéressant de noter que vous n'avez pas besoin d'écrire un plugin pour utiliser jQuery dans une fonction. Certainement si c'est une fonction simple et ponctuelle, je crois que l'écriture d'un plugin est exagérée. Cela pourrait être fait beaucoup plus facilement en passant simplement le sélecteur à la fonction comme paramètre . Votre code ressemblerait à quelque chose comme ceci:

function myFunction($param) {
   $param.hide();  // or whatever you want to do
   ...
}

myFunction($('#my_div'));

noter que le $ dans le nom de la variable $param n'est pas requis. C'est juste une habitude pour moi de faire en sorte qu'il soit facile de se rappeler que cette variable contient un sélecteur jQuery. Vous pouvez aussi utiliser param .

62
répondu Pevara 2016-08-08 11:44:51

bien qu'il y ait une plethora de documentation / tutoriels là-bas, la réponse simple à votre question Est la suivante:

// to create a jQuery function, you basically just extend the jQuery prototype
// (using the fn alias)

$.fn.myfunction = function () {
    // blah
};

à l'intérieur de cette fonction, la variable this correspond à l'ensemble enveloppé jQuery sur lequel vous avez appelé votre fonction. Donc quelque chose comme:

$.fn.myfunction = function () {
    console.log(this.length);
};

$('.foo').myfunction();

... renvoie à la console le nombre d'éléments de la classe foo .

bien sûr, là un peu plus à la sémantique que cela (ainsi que les meilleures pratiques, et tout ce jazz), alors assurez-vous de lire.

33
répondu Richard Neil Ilagan 2012-08-23 13:57:51

pour rendre une fonction disponible sur les objets jQuery, vous l'ajoutez au prototype jQuery (fn est un raccourci pour prototype en jQuery) comme ceci:

jQuery.fn.myFunction = function() {
    // Usually iterate over the items and return for chainability
    // 'this' is the elements returns by the selector
    return this.each(function() { 
         // do something to each item matching the selector
    }
}

Cela est généralement appelé un plugin jQuery .

exemple - http://jsfiddle.net/VwPrm /

9
répondu Richard Dalton 2012-08-23 14:00:00

Yup-ce que vous décrivez est un plugin jQuery.

pour écrire un plugin jQuery, vous créez une fonction en JavaScript, et l'assignez à une propriété sur l'objet jQuery.fn .

E. G.

jQuery.fn.myfunction = function(param) {
    // Some code
}

dans votre fonction de plugin, le mot-clé this est défini à l'objet jQuery sur lequel votre plugin a été invoqué. Donc, quand vous faites:

$('#my_div').myfunction()

puis this inside myfunction sera défini à l'objet jQuery retourné par $('#my_div') .

voir http://docs.jquery.com/Plugins/Authoring pour toute l'histoire.

6
répondu Paul D. Waite 2012-08-23 14:04:04
$(function () {
    //declare function 
    $.fn.myfunction = function () {
        return true;
    };
});

$(document).ready(function () {
    //call function
    $("#my_div").myfunction();
});
6
répondu user1619962 2015-07-13 13:08:53

Oui, les méthodes à appliquer aux éléments sélectionnés à l'aide de jquery, sont appelés plugins jquery, et il est une bonne quantité d'informations sur la création d' au sein de l'jquery docs.

il est intéressant de noter que jquery est javascript, donc il n'y a rien de spécial au sujet d'une "méthode jquery".

3
répondu Jamiec 2012-08-23 13:53:06

vous pouvez écrire vos propres plugins jQuery (fonction qui peut être appelée sur des éléments sélectionnés) comme ci-dessous:

(function( $ ){
    $.fn.myFunc = function(param1, param2){
        //this - jquery object holds your selected elements
    }
})( jQuery );



Appelez plus tard comme:

$('div').myFunc(1, null);
3
répondu Michael 2012-08-23 14:05:16

vous pouvez également utiliser étendre (la façon dont vous créez des plugins jQuery):

$.fn.extend(
{
    myfunction: function () 
    {
    },

    myfunction2: function () 
    {
    }
});

Utilisation:

$('#my_div').myfunction();
3
répondu Novasol 2014-06-27 16:57:09

Vous pouvez toujours faire ceci:

jQuery.fn.extend({
   myfunction: function(param){
       // code here
   },
});
OR
jQuery.extend({
   myfunction: function(param){
       // code here
   },
});
$(element).myfunction(param);
1
répondu Judah rogan 2017-11-27 20:11:53

on dirait que vous voulez étendre l'objet jQuery via son prototype (alias écrivez un plugin jQuery ). Cela signifierait que chaque nouvel objet créé en appelant la fonction jQuery ( $(selector/DOM element) ) aurait cette méthode.

voici un exemple très simple:

$.fn.myFunction = function () {
    alert('it works');
};

Démo

0
répondu jbabey 2012-08-23 13:59:55

L'exemple le plus simple pour faire n'importe quelle fonction dans jQuery est

jQuery.fn.extend({
    exists: function() { return this.length }
});

if($(selector).exists()){/*do something here*/}
0
répondu ChintanThummar 2016-03-15 11:53:14

créer une méthode" coloriser":

$.fn.colorize = function custom_colorize(some_color) {
    this.css('color', some_color);
    return this;
}

Utiliser:

$('#my_div').colorize('green');

cet exemple simple combine le meilleur de comment créer un Plugin de base dans les docs jQuery, et les réponses de @Candide , @Michael .

0
répondu Bob Stein 2017-09-26 14:18:05