In a plugin I'm writing, the dev can specify options, which I'm storing and referencing like so:
(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);
My Question:
Say I want to loop through all three elements (main, menu, middle) and get the respective option value, how would I construct o.[elem]Width dynamically, if at all possible?
This doesn't work (ERROR: missing name after . operator):
// 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 );
}
You're getting the error because you're trying to use both forms of the object member operator.
The two forms are...
obj.propertyName
dot notationobj["propertyName"]
bracket notationYou have
.[...]
(using both. The dot expects a name to come after it)You need
[...]
(no preceding dot)Then also, you want to do string concatenation to add
"Width"
What you're looking for is bracketed notation with strings:
...assuming that
el.jqmData("panel")
returns"mid"
,"menu"
, etc.In JavaScript, you can refer to a property with either dotted notation and a literal (
obj.foo
), or bracketed notation and a string (obj["foo"]
). In the latter case, it doesn't have to be a literal string, it can be the result of an expression.You should be able to concatenate "Width" to the "panel" result:
E.g., if
el.jqmData("panel")
is "menu" you would geto["menuWidth"]
.