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()
13 answers
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.
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
.
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/
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.
$(function () {
//declare function
$.fn.myfunction = function () {
return true;
};
});
$(document).ready(function () {
//call function
$("#my_div").myfunction();
});
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".
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);
Também pode usar extend (a forma como cria plugins jQuery):
$.fn.extend(
{
myfunction: function ()
{
},
myfunction2: function ()
{
}
});
Utilização:
$('#my_div').myfunction();
Podes sempre fazer isto:
jQuery.fn.extend({
myfunction: function(param){
// code here
},
});
OR
jQuery.extend({
myfunction: function(param){
// code here
},
});
$(element).myfunction(param);
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');
};
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*/}
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.
- a a expressão da função nomeada pode melhorar os traços da pilha, etc.
- um método personalizado que devolve
this
pode estar acorrentado. (Obrigado @Potheek.)