2012-03-14 71 views
0

不知道如果我正确地处理这个...动态使用jQuery选择在插件

基本上我有沿线的插件结构:

(function($){ 

$.fn.xxxxx = function(options) { 

    var o = { 
     widgets: 'a,b,c', 
     a: { 
      id: 'abc', 
      title: 'ABC' 
     }, 
     b: { 
      id: 'def', 
      title: 'DEF' 
     }, 
     c: { 
      id: 'ghi', 
      title: 'GHI' 
     } 
    }; 

    var options = $.extend(o, options); 

    return this.each(function(options){ 

     var myplugin = { 
      init: function(){ 
       var x = o.widgets.split(','); 
       $.each(x, function(i,v){ 
        myplugin.widgets(i,v); 
       }); 
      }, 
      widgets: function(i,v){ 

       var t = o.v.title ? '<h3>'+o.v.title+'</h3>' : '' ; 

      } 
     } 
     myplugin.init(); 
    }); 
}; 

})(jQuery的);

是否可以使用o.widgets选项中的字符串值来调用o.a,o.b,o.c选项之一?

基本上,a,b或c将被传递给小部件功能,然后用于分配选项值。以下是我想做的事情,但它显然不工作这样的:

var t = o.v.title ? '<h3>'+o.v.title+'</h3>' : '' ; 

任何帮助表示赞赏!

回答

1

嗯,关于JavaScript的特别漂亮的事情之一是,以下是等价的:

foo.bar === foo['bar']; 

所以,如果你想访问o.a,您可以通过o['a']访问它。 采取进一步的,可以塑造一个功能类似如下:

function herp (opt) { 
    return o[opt]; 
} 

...并调用它像var foo = herp('a');什么的。

+0

优秀。谢谢! – Lee 2012-03-14 09:28:12

1

你可以这样做:

var t = o['a'].title ? '<h3>' + o['a'].title + '</h3>' : ''; 

,它允许你这样做:

var v = 'a'; 
var t = o[v].title ? '<h3>' + o[v].title + '</h3>' : ''; 
+0

谢谢。完美工作 – Lee 2012-03-14 09:28:50