2012-03-14 107 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