Если вы подумаете об этом, в контексте вашего methods
объекта нет this
. Поэтому вам нужно передать его через init()
вызов:
(function($){
var methods = {
init: function(sel, options) {
var $this = $(sel);
И затем, когда вы вызываете свой плагин, передайте this
вашему init()
методу:
$.fn.yourPlugin = function(method) {
if (!this.length) {
return this;
}
if (methods[method]) {
return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
} else if (typeof method === 'object' || !method) {
return methods.init(this, arguments);
} else {
$.error('Method ' + method + ' does not exist on jQuery.yourPlugin');
}
};
Единственное, что я хотел бы предостеречь, это то, что в момент, когда установлена переменная $this
, это фактически объект jQuery, а не конкретный элемент. Поэтому я использовал:
(function($){
var methods = {
init: function(sel, options) {
var $sel = $(sel);
И что касается использования $this
в обработчике событий, вам необходимо переопределить его:
$(window).bind("scroll.globalMessage", function() {
$this = $('#the_selector_for_your_element'); // Maybe $(this)?
$this.css("top", $(window).scrollTop());
});