Javascript 如何为jQuery插件设置私有变量?
我想创建一个简单的插件,它使用元素的文本作为默认值,或者您可以在调用插件时设置此值 但是如果我没有设置值,并且为多个元素调用插件,默认值就会成倍增加Javascript 如何为jQuery插件设置私有变量?,javascript,jquery,jquery-plugins,scope,Javascript,Jquery,Jquery Plugins,Scope,我想创建一个简单的插件,它使用元素的文本作为默认值,或者您可以在调用插件时设置此值 但是如果我没有设置值,并且为多个元素调用插件,默认值就会成倍增加 (function($) { $.fn.reText = function(options) { var settings = $.extend({ label : $(this).text() }, options); return this.each(functio
(function($) {
$.fn.reText = function(options) {
var settings = $.extend({
label : $(this).text()
}, options);
return this.each(function() {
$(this).text(settings.label);
});
};
})(jQuery);
电话:
结果是:
<div>text 1</div>
<div>text 2</div>
text 1
文本2
我知道,问题是
设置的范围,但我不知道如何解决问题…它必须位于每个循环中,以便给定集合中的每个元素都将获得自己的默认值
(function ($) {
$.fn.reText = function (options) {
return this.each(function () {
var settings = $.extend({
label: $(this).text()
}, options);
$(this).text(settings.label);
});
};
})(jQuery);
演示:将设置变量声明移动到每个函数内部,以便每个元素/div的设置变量声明不同
示例代码如下所示:
return this.each(function() {
var settings = $.extend({
label : $(this).text()
}, options);
$(this).text(settings.label);
});
对于您进一步询问如何让其他方法访问您的私有变量,您只需在迭代开始时设置一个“self”上下文,然后引用它即可。迭代中声明的所有其他方法仍然可以引用self.settings
,尽管它们本身将在新的函数上下文中
$.fn.reText = function(options) {
return this.each(function() {
var self = this;
self.settings = $.extend({
label : $(this).text()
}, options);
$(this).text(self.settings.label);
self.DoSomething = function() {
console.log(self.settings.label);
}
});
};
或者,如果您不在迭代循环的范围内,可以使用Jquery.data
方法设置实例数据,因为您依赖于Jquery
// Store
$(this).data("reText", self.settings);
...
console.log($(this).data("reText"))
好的,但是如果我想使用另一种方法上的设置来解决问题,该怎么办?我忘了写这个案子…你到底想要什么?给我们完整的测试用例。是的,你是对的。我将为这种情况编写另一个代码,但这是一个很好的答案,接受这个,谢谢!看起来不错,但我把问题贴出来了。你能看一下吗?
// Store
$(this).data("reText", self.settings);
...
console.log($(this).data("reText"))