【发布时间】:2012-02-21 19:15:37
【问题描述】:
我正在尝试创建一个 jQuery 插件,它将向上下文对象添加新的命名空间函数,同时保持完整的链能力。我不确定这是否可能,但这是我目前所拥有的一个例子:
(function ($) {
var loadScreen = $('<div />').text('sup lol');
$.fn.someplugin = function (args) {
var args = args || {},
$this = this;
$this.append(loadScreen);
return {
'caption' : function (text) {
loadScreen.text(text);
return $this;
}
};
}
})(jQuery);
如果我这样做$(document.body).someplugin().caption('hey how\'s it going?').css('background-color', '#000');,这很好用
不过我还需要$(document.body).someplugin().css('background-color', '#000').caption('hey how\'s it going?');的能力
由于.someplugin() 返回它自己的对象,而不是一个jQuery 对象,它不能按预期工作。我还需要以后能够通过$(document.body) 访问.caption()。例如,如果没有为初始 $(document.body).someplugin() 设置变量。这意味着 .caption() 将以某种方式通过 $.fn.caption = function () ... 设置为 document.body 对象。这是我不太确定可能的部分。如果没有,那么我想我将不得不满足于要求设置一个变量,以维护插件函数链能力。
这是我所期望的示例代码:
$(document.body).someplugin().css('background-color', '#000');
$('.non-initialized').caption(); // Error, jQuery doesn't know what caption is
$(document.body).caption('done loading...');
如果这是不可能的,或者只是效率很低,我愿意满足于:
var $body = $(document.body).someplugin().css('background-color', '#000');
$('.non-initialized').caption(); // Error, jQuery doesn't know what caption is
$body.caption('done loading...');
【问题讨论】:
标签: javascript jquery plugins namespaces