jQuery中/ JavaScript的访问动态属性名称(Accessing dynamic pro

2019-10-16 21:03发布

在插件我写的开发可以指定选项,我存储和引用,像这样:

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

Answer 1:

你应该能够“宽度”拼接的“面板”的结果:

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

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



Answer 2:

你是因为你想使用对象成员操作的两种形式得到错误。

这两种形式是...

  • obj.propertyName 点符号

  • obj["propertyName"] 括号符号

你有.[...] 同时使用该点需要一个名字来后话)

您需要[...] 无前面的句点)

然后也,你想要做字符串连接加"Width"

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


Answer 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"] 在后一种情况下,它不必须是一个文本字符串,它可以是一个表达式的结果。



文章来源: Accessing dynamic property names in Jquery/Javascript