在Jquery / Javascript中访问动态属性名称

时间:2012-06-15 12:50:21

标签: javascript jquery dynamic jquery-selectors

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

(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 );
   }

3 个答案:

答案 0 :(得分:3)

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

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

例如,如果el.jqmData("panel")是“菜单”,您将获得o["menuWidth"]

答案 1 :(得分:2)

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

这两种形式是......

  • obj.propertyName 点符号

  • obj["propertyName"] 括号表示法

你有.[...] (同时使用这两个。点需要一个名字跟在之后)

您需要[...] (没有前一个点)

然后,您还要进行字符串连接以添加"Width"

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

答案 2 :(得分: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"])的属性。在后一种情况下,它不必是文字字符串,它可以是表达式的结果。