2009-11-18 1 views
22

Скажем, у меня есть следующий JQuery плагин:Вызов плагин JQuery без указания каких-либо элементов

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

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

$("body").myPlugin(); 

Есть ли способ, который я могу назвать своим плагином, не указав элемент?

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

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

ответ

47

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

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

право способ писать это:

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

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

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

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

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

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

$.myPlugin(); 
+0

Я знаю об этом шаблоне :) Я просто не использовал его в вопросе, чтобы избежать загромождения кода.Но спасибо за расширенный метод! –

-1

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

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

+0

Нет это не нужно любые элементы для работы; поэтому мне нужно, чтобы он вызывался без каких-либо элементов –

+0

Так что я должен изменить его на '$ .myPlugin = function()' вместо использования 'fn'? потому что я попробовал это сейчас, и я могу называть его тогда с помощью обозначений, которые я хочу: '$ .myPlugin();' –

+0

И если я использую '$ .myPlugin = function()', будет ли он по-прежнему технически называться «плагин»? –

2

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

jQuery.extend({ 
    func: function() { 
     alert('test'); 
    } 
}); 
$.func(); 
Смежные вопросы