Плагин не работает, когда я использую .fn, но работает, если я его отключаю - PullRequest
0 голосов
/ 31 января 2011

Я пытаюсь написать свой первый плагин jQuery. Следуя документации по плагину jQuery, я сделал это:

(function($) {
  $.fn.selection = function(array, n) { ... };
}(jQuery));

Но когда я пытаюсь запустить его с некоторым кодом, подобным этому:

var array = [5, 2, 1, 5, 9]; 
alert($.selection(array, 2));

Я получаю ошибку Uncaught TypeError: Object function (j,s){return new b.fn.init(j,s)} has no method 'selection'.

Однако, когда я теряю .fn, вот так:

(function($) {
  $.selection = function(array, n) { ... };
}(jQuery));

Все работает. Почему оригинальный пример не работает, добавляя к jQuery.fn объект, как предлагает документ jQuery?

Ответы [ 2 ]

2 голосов
/ 31 января 2011

$. Fn - это прототип, используемый для объектов jQuery, созданных из $ ("...").

$ - фабрика и пространство имен jQuery.

So

$.mymethod = function (){}

можно вызвать только через

$.mymethod()

Но

$.fn.mymethod = function () { this.remove(); }

можно назвать так.

var divs = $(".mydivs");
divs.mymethod();

И во втором примере mymethod будет вызываться с использованием выбора jQuery в качестве объекта и удалит все соответствующие div.

Подробнее здесь:

http://docs.jquery.com/Plugins/Authoring

1 голос
/ 31 января 2011

При использовании $.fn.selection функция доступна только для объектов jquery, т.е. $("<SOME_SELECTOR>").selection

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