Я пытаюсь создать плагин 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, он не работает должным образом. Мне также нужно иметь возможность позже получить доступ .caption()
к $(document.body)
. Так, например, если переменная не установлена для начального $(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...');