Accessing dynamic property names in Jquery/Javascript

痞子三分冷 提交于 2019-12-11 09:31:57

问题


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

回答1:


You should be able to concatenate "Width" to the "panel" result:

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

E.g., if el.jqmData("panel") is "menu" you would get o["menuWidth"].




回答2:


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 notation

  • obj["propertyName"] bracket notation

You 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"

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



回答3:


What you're looking for is bracketed notation with strings:

for (var i = 0; i<elems.length; i++){
   var el = elems.eq(i);
   console.log( o[el.jqmData("panel") + "Width"] );
   }

...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.



来源:https://stackoverflow.com/questions/11050978/accessing-dynamic-property-names-in-jquery-javascript

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!