当我使用.fn时,插件不起作用,但是如果我将其关闭则不行

时间:2011-01-31 06:49:34

标签: jquery-plugins

我正在尝试编写我的第一个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 doc那样添加到jQuery.fn对象?

2 个答案:

答案 0 :(得分:2)

$。fn是用于从$(“...”)创建的jQuery对象的原型。

$是jQuery工厂和命名空间。

所以

$.mymethod = function (){}

只能通过

调用
$.mymethod()

但是

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

可以这样调用。

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

在第二个例子中,mymethod将使用jQuery选择作为对象调用,并将删除所有匹配的div。

在这里阅读更多内容:

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

答案 1 :(得分:1)

使用$.fn.selection时,该函数仅适用于jquery对象,即$("<SOME_SELECTOR>").selection