Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何为jQuery插件设置私有变量?_Javascript_Jquery_Jquery Plugins_Scope - Fatal编程技术网

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"))