1

在我正在编写的插件中,开发人员可以指定我正在存储和引用的选项,如下所示:

(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]Width

这不起作用(错误:. 运算符后缺少名称):

// 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 );
   }
4

3 回答 3

4

您应该能够将“宽度”连接到“面板”结果:

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

例如,如果el.jqmData("panel")是“菜单”,你会得到o["menuWidth"].

于 2012-06-15T12:53:36.487 回答
3

您收到错误是因为您尝试使用两种形式的对象成员运算符。

这两种形式是...

  • obj.propertyName 点符号

  • obj["propertyName"] 括号符号

你有.[...] (同时使用。点希望后面有一个名字)

你需要[...] (没有前面的点)

然后,您还想做字符串连接以添加"Width"

o[el.jqmData("panel") + "Width"]
于 2012-06-15T12:55:52.677 回答
3

您正在寻找的是带括号的字符串表示法:

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"]) 来引用属性。在后一种情况下,它不必是文字字符串,它可以是表达式的结果。

于 2012-06-15T12:55:59.917 回答