Вызов плагина jQuery без указания каких-либо элементов - PullRequest
25 голосов
/ 18 ноября 2009

Скажем, у меня есть следующий плагин jQuery:

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

Обычно вы вызываете плагин для определенного количества элементов, например:

$("body").myPlugin();

Можно ли как-нибудь вызвать плагин без указания элемента?

Я пытался назвать это так: $.myPlugin();, но это не работает.

Что работает, это: $().myPlugin();, но это правильный способ вызвать его?

Ответы [ 3 ]

50 голосов
/ 18 ноября 2009

быстрый способ написать это так:

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

правильный способ написать это так:

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

Поначалу это может показаться немного запутанным, но это обычный шаблон jQuery.

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

Этот код создает анонимную функцию и вызывает ее, передавая jQuery в качестве аргумента. Внутри функции этот аргумент связан с $. Причина этого заключается в том, что он позволяет вам работать с $, даже если jQuery работает в режиме без конфликтов .

Вторая часть $.extend. Он в основном расширяет сам объект jQuery, когда вызывается с одним аргументом.

Вызов плагина (в быстром и правильном случае):

$.myPlugin();
2 голосов
/ 18 ноября 2009

Я думаю, что вы ищете jQuery.extend ():

jQuery.extend({
    func: function() {
        alert('test');
    }
});
$.func();
0 голосов
/ 18 ноября 2009

Использует ли он коллекцию , если вы пишете что-то другое, например $('a').myPlugin()? Если это не так, то почему вы помещаете это в $.fn? Может быть, вы хотели добавить его в jQuery.

Если он работает над коллекцией, но иногда пустая коллекция имеет смысл, тогда я думаю, что ваш инвокант должен быть $([]) - передача пустого Array в jQuery дает вам пустая коллекция; Похоже, что ничего не передавая, вы получите коллекцию, содержащую document.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...