Como criar uma função jQuery (um novo método jQuery ou plugin)?

sei que em JavaScript a sintaxe é a seguinte:

function myfunction(param){
  //some code
}

Existe uma maneira de declarar uma função em jQuery que pode ser adicionada a um elemento? Por exemplo:

$('#my_div').myfunction()
Author: multimediaxp, 2012-08-23

13 answers

Dos documentos de :

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

Então você faz

$('#my_div').myfunction();
 246
Author: Candide, 2014-01-27 17:00:41

Apesar de todas as respostas que você já recebeu, vale a pena notar que você não precisa escrever um plugin para usar jQuery em uma função. Certamente, se é uma simples função de uma só vez, eu acredito que escrever um plugin é exagero. Poderia ser feito muito mais facilmente se apenas passasse o selector para a função como um parâmetro . O teu código seria parecido com isto.

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

myFunction($('#my_div'));

Note que o $ no nome da variável $param não é necessário. É apenas um hábito meu. para tornar mais fácil lembrar que essa variável contém um selector jQuery. Você poderia apenas usar param também.

 62
Author: Pevara, 2016-08-08 11:44:51

Enquanto há umapletora de documentação / tutoriais lá fora, a resposta simples para a sua pergunta é esta:

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

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

Dentro dessa função, a variável this corresponde ao conjunto envolto em jQuery em que ligou a sua função. Algo do género:

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

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

... irá descarregar para a consola o número de elementos com a classe foo.

É claro que há um pouco mais de semântica do que isso (assim como as melhores práticas, e todo esse jazz), por isso certifique-se leste tudo.
 33
Author: Richard Neil Ilagan, 2012-08-23 13:57:51

Para tornar uma função disponível em objectos jQuery, adiciona - a ao protótipo jQuery (fn é um atalho para o protótipo em jQuery) como este:

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
    }
}

Isto é normalmente chamado de um plugin jQuery .

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

 9
Author: Richard Dalton, 2012-08-23 14:00:00
Sim , o que está a descrever é um plugin jQuery.

Para escrever um 'plugin' jQuery, você cria uma função em JavaScript e atribui-a a uma propriedade no objecto jQuery.fn.

Por exemplo

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

Dentro da sua função de 'plugin', a palavra-chave this está definida para o objecto jQuery no qual o seu 'plugin' foi invocado. Então, quando o fizeres ...

$('#my_div').myfunction()

Então this dentro de myfunction será ajustado para o objecto jQuery devolvido por $('#my_div').

Ver http://docs.jquery.com/Plugins/Authoring para a história completa.

 6
Author: 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
Author: user1619962, 2015-07-13 13:08:53

Sim, os métodos que aplica aos elementos seleccionados usando o jquery são chamados 'plugins' jquery e existe uma boa quantidade de informação sobre a autoria dentro dos documentos do jquery.

Vale a pena notar que o jquery é apenas javascript, por isso não há nada de especial sobre um "método jquery".

 3
Author: Jamiec, 2012-08-23 13:53:06

Você pode escrever os seus próprios 'plugins' jQuery (função que pode ser chamada nos elementos seleccionados) como em baixo:

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


Chama-o mais tarde como:

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

Também pode usar extend (a forma como cria plugins jQuery):

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

    myfunction2: function () 
    {
    }
});

Utilização:

$('#my_div').myfunction();
 3
Author: Novasol, 2014-06-27 16:57:09

Podes sempre fazer isto:

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

Parece que quer extender o objecto jQuery através do seu protótipo (também conhecido por escrever um 'plugin' jQuery). Isto significaria que cada novo objeto criado através da chamada de função jQuery ($(selector/DOM element)) teria este método.

Aqui está um exemplo muito simples:

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

Demonstração

 0
Author: jbabey, 2012-08-23 13:59:55

O exemplo mais simples para fazer qualquer função em jQuery é

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

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

Criar um método de "colorir":

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

Usa-o:

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

Este exemplo simple-ish combina o melhor de Como criar um Plugin básico nos documentos do jQuery, e respostas de @Candide, @Michael.

 0
Author: Bob Stein, 2017-09-26 14:18:05