Вызов плагина jQuery без указания каких-либо элементов
Скажем, у меня есть следующий плагин jQuery:
$.fn.myPlugin = function () {
//plugin code
}
Обычно вы вызываете плагин на определенное количество элементов, например:
$("body").myPlugin();
Есть ли способ вызвать мой плагин без указания элемента?
Я пробовал называть его так: $.myPlugin();
, но это не работает.
Что работает: $().myPlugin();
, но является ли это правильным способом его вызова?
Ответы
Ответ 1
быстрый способ записи:
$.myPlugin = function () {
// Plugin code
}
Способ записи right заключается в следующем:
(function ($) {
$.extend({
myPlugin: function () {
// plugin code
}
});
})(jQuery);
Сначала это может показаться немного запутанным, но это обычный шаблон jQuery.
(function($){
// Code
})(jQuery);
Этот код создает анонимную функцию и называет ее передачей jQuery
в качестве аргумента. Внутри функции этот аргумент привязан к $
. Причина этого заключается в том, что он позволяет работать с $
, даже если jQuery работает в режиме no-conflict.
Вторая часть $.extend
. Он в основном расширяет сам объект jQuery при вызове с единственным аргументом.
Вызов плагина (в быстром и правильном случае):
$.myPlugin();
Ответ 2
Я думаю, что вы ищете jQuery.extend():
jQuery.extend({
func: function() {
alert('test');
}
});
$.func();
Ответ 3
Использует ли он коллекцию, если вы пишете что-то другое, например $('a').myPlugin()
? Если это не так, то почему вы помещаете его в $.fn
? Возможно, вы хотели ввести его в jQuery
.
Если он работает в коллекции, но иногда пустая коллекция имеет смысл, то я думаю, что ваш invocant должен быть $([])
- передача пустого Array
в jQuery
дает пустую коллекцию; вообще ничего не пропускает, кажется, дает вам коллекцию, содержащую document
.