2012-06-15 45 views
1

訪問動態屬性名稱在一個插件我寫的開發可以指定選項,我存儲和引用,像這樣:jQuery中/ JavaScript的

(function($, window) { 
    $.widget("mobile.plug", $.mobile.widget, { 
     options: { 
      menuWidth: '25%', 
      middleWidth: '25%', 
      mainWidth: '25%' 
      }, 
     some: function(){ 
      var self = this, 
       o = self.options; 

      console.log(o.menuWidth); 
      } 
    }) 
}) (jQuery,this); 

我的問題
說我想循環遍歷所有三個元素(主菜單,中間菜單)並獲得相應的選項值,如果可能,我將如何動態構造o [elem]寬度

這不起作用(錯誤:失蹤名操作員):

// this selects panels with jqmData(panel="mid|menu|main") 
var elems = $('selector'); 

for (var i = 0; i<elems.length; i++){ 
    var el = elems.eq(i); 
    console.log(o.[el.jqmData("panel")]Width); 
    } 
+0

爲什麼使用點符號這麼重要? – Gareth

+0

@Gareth:你說得對,問題是誤導。我以爲我需要點符號。我其實不知道,我也可以用括號[]來做。什麼會是一個更好的標題? – frequent

回答

3

你應該能夠串連 「寬」 到 「面板」 的結果:

o[el.jqmData("panel") + "Width"] 

如,如果el.jqmData("panel")是「菜單」,你會得到o["menuWidth"]

+0

@Gareth謝謝,很好。 –

+0

很酷。這工作!非常感謝你! – frequent

2

由於您試圖使用這兩種形式的對象成員操作符,所以出現錯誤。

的兩種形式是...

  • obj.propertyName點符號

  • obj["propertyName"]括號標記

你有.[...](同時使用。該做的T公司預計一個名字後,來)

你需要[...](無前點)

然後也,你想要做字符串連接添加"Width"

o[el.jqmData("panel") + "Width"] 
+1

另外。謝謝(你的)信息! – frequent

2

什麼你」重新尋找是帶括號的字符串:

for (var i = 0; i<elems.length; i++){ 
    var el = elems.eq(i); 
    console.log(o[el.jqmData("panel") + "Width"]); 
    } 

.. 。假設該el.jqmData("panel")回報"mid""menu"

在JavaScript中,你可以參考屬性與任何點符號和文字(obj.foo),或括號符號和一個字符串(obj["foo"])。在後一種情況下,它不一定是文字字符串,它可以是表達式的結果。

+0

感謝您的解釋。 – frequent