我正在嘗試創建一個jQuery插件,它將在保持完整鏈能力的同時將新名稱空間函數添加到上下文對象。我不知道這是否是可能的,但這裏有一個什麼我到目前爲止的例子:特定對象的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...');
整個問題的關鍵是我不會混淆jQuery命名空間,同時仍然可以將可鏈接的函數擴展到我自己的插件上。 '.caption()'可能在'$ .fn.loading = function()...'和'$ .fn.tabs = function()'之間完全不同。基本上,我需要能夠在不同插件之間分離'.caption()'功能。 – Shea 2012-01-29 20:32:00
我想我已經想出了一個使用'.extend($ this,{caption:function(){...}})的解決方案;'...它仍然要求我使用變量,但至少它不是混亂jQuery名稱空間。 – Shea 2012-01-29 20:33:29
請記住,您只是擴展了特定的jQuery對象,您將不得不保存該jQuery對象才能訪問該方法。你也可以用'this.caption = function(){};做到這一點''''你不需要'.extend()'。 – jfriend00 2012-01-29 20:36:11