0

这是我第一次开发 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');

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

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

我怎样才能做到这一点?难道我做错了什么?谢谢..

4

1 回答 1

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/

于 2013-04-11T18:45:46.567 回答