在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 ); }
您应该能够将“宽度”连接到“面板”结果:
o[el.jqmData("panel") + "Width"]
例如,如果el.jqmData("panel")
是“menu”,你会得到o["menuWidth"]
。
您收到错误是因为您尝试使用对象成员运算符的两种forms。
这两种forms是……
-
obj.propertyName
点表示法 -
obj["propertyName"]
括号表示法
你有.[...]
(使用两者。点预计会有一个名字出现在它之后)
你需要[...]
(没有前面的点)
然后,你想要做字符串连接添加"Width"
o[el.jqmData("panel") + "Width"]
您正在寻找的是用括号括起来的符号表示法:
for (var i = 0; i
...假设el.jqmData("panel")
返回"mid"
, "menu"
等。
在JavaScript中,您可以引用带有虚线表示法和文字( obj.foo
)的属性,或带括号的表示法和字符串( obj["foo"]
)。 在后一种情况下,它不必是文字字符串,它可以是表达式的结果。