我有一個jQuery插件,它遵循docs.jQuery.com的插件/創作示例,並且我無法弄清楚如何爲插件的每個元素保留唯一的設置應用於。頁面上有兩個元素,每個元素都分別應用於它們。基於插件/創作插件的jQuery作用域設置
這是到目前爲止我的代碼:
(function($) {
/* Default settings */
var defaults = {
id: null,
properties: null,
container: '.comp-settings', /* override for .retail or .distressed */
priceLabel: '.comp-section-header span',
slide: slideCallback,
minRange: 100000
};
/* Some public here: $.compSlider('method', options) */
var methods = {
init: function(options) {
var settings = $.extend({}, defaults, options);
return this.each(function() {
$(this).slider(settings);
});
}
}
/* Some methods here */
function opt(name) {
return settings[ name ];
}
/* Plugin namespace */
$.fn.compSlider = function(method) {
// Method calling logic
if (methods[method]) {
return methods[ method ].apply(this, Array.prototype.slice.call(arguments, 1));
} else if (typeof method === 'object' || ! method) {
return methods.init.apply(this, arguments);
} else if (typeof method === 'string') {
return this.slider(method, Array.prototype.slice.call(arguments, 1));
}
};
})(jQuery)
問題:
- 的設置變量是不是在插件功能
- 如果我存儲在$變量的設置(此訪問).data('settings')我仍然無法從'opt'函數訪問$(this).data('settings'),因爲「this」不是元素(我相信它是DOM窗口)。
任何幫助表示讚賞。
150磅:我測試了這個,它沒有工作。問題仍然存在,應用了.compSlider()方法的最新元素將更新所有以前使用過的.compSlider()應用的其他元素的所有「設置」。你可以在這裏看到兩個不同的DOM對象,它們都有不同的設置,但是兩者都顯示相同的設置(settings.container這是一個選擇器):http://cl.ly/0u0L1i433V3m1d2V0B1Z –
不完全確定你在哪裏會出錯,但我建立了一個jsfiddle來演示我在說什麼:http://jsfiddle.net/kFL5N/。我不確定這是你想要做什麼,但它表明每個實例的獨立設置。 – Donamite
150磅作品:在原文中查看「問題#2」。不過,我想我可能只是按照你所建議的方法去做。 –