Jquery plugins 插件不';当我使用.fn时,它不会工作,但如果我不使用它,它会工作

Jquery plugins 插件不';当我使用.fn时,它不会工作,但如果我不使用它,它会工作,jquery-plugins,Jquery Plugins,我正在尝试编写我的第一个jQuery插件。根据jQuery插件文档,我做了以下工作: (function($) { $.fn.selection = function(array, n) { ... }; }(jQuery)); 但当我尝试使用以下代码运行它时: var array = [5, 2, 1, 5, 9]; alert($.selection(array, 2)); (function($) { $.selection = function(array, n) { ..

我正在尝试编写我的第一个jQuery插件。根据jQuery插件文档,我做了以下工作:

(function($) {
  $.fn.selection = function(array, n) { ... };
}(jQuery));
但当我尝试使用以下代码运行它时:

var array = [5, 2, 1, 5, 9]; 
alert($.selection(array, 2));
(function($) {
  $.selection = function(array, n) { ... };
}(jQuery));
我得到了错误
uncaughttypeerror:Object函数(j,s){returnnewb.fn.init(j,s)}没有方法“selection”

但是,当我像这样松开
.fn
时:

var array = [5, 2, 1, 5, 9]; 
alert($.selection(array, 2));
(function($) {
  $.selection = function(array, n) { ... };
}(jQuery));

一切正常。为什么原始示例不能像jQuery文档建议的那样添加到
jQuery.fn
对象中?

当您使用
$.fn.selection
时,该函数仅适用于jQuery对象,即
$(“”).selection

当您使用
$.fn.selection
该函数仅适用于jquery对象,即
$(“”)。selection

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

$是jQuery工厂和名称空间

所以

只能叫通

$.mymethod()
但是

可以这样叫

var divs = $(".mydivs");
divs.mymethod();
在第二个示例中,将使用jQuery选择作为对象调用mymethod,并删除所有匹配的div

请在此处阅读更多信息:


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

$是jQuery工厂和名称空间

所以

只能叫通

$.mymethod()
但是

可以这样叫

var divs = $(".mydivs");
divs.mymethod();
在第二个示例中,将使用jQuery选择作为对象调用mymethod,并删除所有匹配的div

请在此处阅读更多信息:


这是否意味着我在插件兼容性方面做了正确的事情,直接向
jQuery
添加一个函数?如果您只需要一个不需要任何特定上下文(如text()、html()等)的函数,那么您的第二种方法就可以了。@Rich,您的第二种解决方案就像C#中的静态方法,它不适用于jQuery类型的对象,而是使用jQuery作为名称空间来放置方法。感谢David和Cybernate,这就是我一直在寻找的。这是否意味着我在插件兼容性方面做了正确的事情,直接向
jQuery
添加一个函数?如果您只需要一个不需要任何特定上下文(如text()、html()等)的函数,那么您的第二种方法就可以了。@Rich,您的第二种解决方案就像C#中的静态方法一样,它不适用于jQuery类型的对象,而是使用jQuery作为名称空间来放置方法。