Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 创建不依赖于DOM元素的小部件_Javascript_Jquery - Fatal编程技术网

Javascript 创建不依赖于DOM元素的小部件

Javascript 创建不依赖于DOM元素的小部件,javascript,jquery,Javascript,Jquery,我正在努力使我的代码更干净,为此,我非常喜欢JQuery小部件。 今天,我想创建一个与Dom元素无关的小部件: $.widget('ui.resaWidget', { options : { viewer : null }... }); 我发现调用此小部件的唯一方法是: $(aDomElement).resaWidget(); 有没有一种方法可以像这样调用我的小部件: $.resaWidget() ? 因为事实上,我的小部件是用于整个页面生成的,而不仅仅是

我正在努力使我的代码更干净,为此,我非常喜欢
JQuery小部件。

今天,我想创建一个与Dom元素无关的小部件:

$.widget('ui.resaWidget', {
    options : {
        viewer : null
    }...
});
我发现调用此小部件的唯一方法是:

$(aDomElement).resaWidget();
有没有一种方法可以像这样调用我的小部件:

$.resaWidget()  ?
因为事实上,我的小部件是用于整个页面生成的,而不仅仅是用于单个DOM元素

顺便说一下,
$('body').resaWidget()
似乎不起作用


感谢您的帮助。

有几种创建jQuery插件的方法

最常见的方法是向
jQuery.fn
(实际上与
jQuery.prototype
)添加一个函数:

此方法用于添加可在
jQuery
实例上调用的函数。即:

$(selector).foo();
jQueryUI的小部件工厂是扩展
jQuery.fn
的简写方法


扩展jQuery的另一种常见方法是向
jQuery
本身添加一个函数:

(function ($) {
    "use strict";
    $.foo = function (/* function parameters */) {
        doStuff();
    };
}(jQuery));
此方法用于从
jQuery
添加静态可调用函数。即:

$.foo();

jQueryUI的小部件工厂无法(目前从1.8开始)创建这些静态函数。使用小部件工厂的主要原因是为了保存上下文。如果您有一个没有上下文的静态函数(不需要
$()
),那么您只需要在函数中编写自己的功能。

我知道这是一个老问题,但从jQuery UI 1.9开始,现在,您可以通过将小部件原型上的
defaultElement
属性设置为
null

来创建非基于dom的小部件,谢谢您的回答。有了这个解决方案,我就失去了widget工厂的所有结构,我不能对私有成员使用“\ux”,而对公共成员则什么也不用。是否有一种方法可以同时利用这两种优势,或者我需要编写自己的工厂代码?每个函数都只能在其关闭范围内访问。标准JavaScript实践不会因为使用jQuery而消失。我个人认为没有必要为静态可访问的函数创建工厂。
$.foo();