2011-05-25 86 views
0

我正在创建一个简单的插件,它会为每个选中的元素创建一个子元素。 我的问题是,插件不返回对子元素的引用。 (或我不知道如何访问它) 这里是插件(你可以假设缺失的部分被省略,以让事情变得简单):每个返回对象的Jquery

(function($) { 

    $.fn.ui_child = function(options) { 

     this.each(function() { 


      return ui_child($(this), options); 

     }) 

    } 

    ui_child = function (target, options) { 


      return new ui_fn_child(target, options); 

    } 
    ui_fn_child = function (target, options) { 


      this.target = target; 

      this.settings= $.extend({}, $.fn.ui_child.defaults, options); 

      this.child_create() 

      return this.child 

    } 
    })(jQuery); 

如果我执行以下操作:

var child = $('selector').ui_child(); 

子变量不引用任何东西。 理想情况下,我希望能够使用变量访问它。 感谢你的帮助

回答

0

如果以这样的方式改变ui_child方法:

$.fn.ui_child = function(options) { 
    var children = []; 
    this.each(function() { 
     children.push(ui_child($(this), options)); 
    }) 
    return children; 
} 

你会得到孩子的数组在这里:

var child = $('selector').ui_child(); 
+0

我怎么会去得到的,而不是一个数组只是单个对象?我正在使用这个插件里面的另一个我正在创建一个包 – salmane 2011-05-25 06:55:57

+0

你想得到什么对象?最后,第一,随机:)? – bjornd 2011-05-25 07:00:06

+0

我想到的情况是函数只返回一个对象(或者如果您愿意,则返回1) – salmane 2011-05-25 07:14:16

0

使用关键字new使函数返回this对象。

也许你应该认为它以不同的方式:

ui_child = function (target, options) { 
     return ui_fn_child(target, options); // no new keyword 
}; 

ui_fn_child = function (target, options) { 

     var o = {}; // explicit object creation 

     o.target = target; 

     o.settings= $.extend({}, $.fn.ui_child.defaults, options); 

     o.child_create(); 

     return o.child; 
}; 
+0

这个问题可能与我理解.each函数的方式有关。没有它,这个插件就是我想要的,这意味着它返回所需的对象。然而,如果选择器找到多于一个匹配,则没有每个匹配,则所有创建的对象都将被引用,而不是每个单独的匹配 – salmane 2011-05-25 07:19:30