jQuery自定义插件,保持设置变量与所选项目相关?

时间:2013-04-11 18:41:22

标签: jquery plugins

这是我第一次开发jQuery插件。基本上我只是编写它来将函数合并在一起并使这些函数更容易使用,比如用方法编写类。

我遇到的问题是,在我对元素使用jQuery命令之后 - 该函数中的所有信息都丢失了,我不能将它用于以后使用。我想将插件用作类的一种,函数作为方法。我想在其中保存Raphael创建的对象,并在以后根据需要操纵它们。这是我的例子:

(function($) {
    $.fn.myPlugin = function(step) {
        if(step == 'step1') {
            var test = 'Function OK!';
            console.log(test);
        }
        if(step == 'step2') {
            console.log(test);
        }
    }
})(jQuery);

$('#elem').myPlugin('step1');
$('#elem').myPlugin('step2');

当然第一个控制台日志打印出变量,但第二个返回undefined。

有没有办法让jQuery充当自我依赖类,具有封闭变量?正如我所提到的,我想创建Raphael对象,然后操纵它们。所以我需要将Raphael对象分配给变量(var graph = Raphael('#elem', options);),所以稍后我需要通过调用函数来访问它,类似于graph.somefunction(doThis);

我该怎么做?难道我做错了什么?感谢..

1 个答案:

答案 0 :(得分:3)

将数据存储在每个元素上。

$.fn.myPlugin = function(step){

    return this.each(function(){
        var $elem = $(this);
        if(step == 'step1') {
            $elem.data('test','Function OK!');
            console.log('step1',this.id,$elem.data('test'));
        }
        if(step == 'step2') {
            console.log('step2',this.id,$elem.data('test'));
        }
    });

};

$('#elem').myPlugin('step1').myPlugin('step2');

它现在一次支持多个元素,具有不同的步骤进度。

$('#elem1').myPlugin('step1');
$('#elem2').myPlugin('step1').myPlugin('step2');
$('#elem1').myPlugin('step2');

http://jsfiddle.net/FaaBV/