这是我第一次开发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);
我该怎么做?难道我做错了什么?感谢..
答案 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');