让插件为多个项目工作

时间:2011-06-15 17:50:21

标签: jquery jquery-plugins

我正在编写一个插件,很难让它实例化多个元素。我把[the code]放在jsfiddle中。特别是问题是对.each()的调用可能失败了:

$.fn.Image = function (options) {
    return this.each(function () {
        (new $.Image(this, options));
    });
};

我从看过其他插件的编写方式开始,但我不确定我是否理解它,特别是为什么使用“new”以及调用时如何产生数组:

var imgs = $('img').Image();

有人可以建议正确的做法是什么?

- 编辑 -

也许我离我更近一点了。我试过这个:

$.fn.Image = function (options) {
    var ret = [];
    this.each(function () {
        ret[ret.length] = $.Image(this, options);
    });
    return ret;
};

至少返回一个对象数组,但是我的调用:

img.toggle();

失败,因为返回的是一个对象数组(可以使用.Image()调用)...所以我猜测$ .fn.Image()需要返回的是一个单独的对象,它以某种方式存储它元素......然后如何使所有方法迭代?我不明白!

2 个答案:

答案 0 :(得分:1)

不确定你在追求什么,但这样的事情呢?

$.fn.Image = function (options) {

    $(this).each(function (i,e) {
        $.fn.Image(e,options);
    });

    this.testing = function(a){
     if (typeof a == "undefined") a = $(this).text();
     alert(a);   
        return this;
    }

    return this;
};

var a = $('ul').Image().addClass('working');
a.testing("sss");
$('ul li:first-child').testing().addClass('working');

示例:http://jsfiddle.net/niklasvh/wEdzY/

答案 1 :(得分:0)

而不是

return this.each(...)

return $(this).each(...)