可以将变量用作属性吗?

时间:2014-10-21 16:17:46

标签: jquery

我有一个JSON文件,其中包含一些信息,例如DOM元素的id(文本字段或下拉框)以及如何获取值的方式,如val(),text()。

{
"textfield":"text()",
"textfield":"val()"
} 

我使用ajax函数来获取json数据......这部分没问题。

我正在做的事情是将json对象用作属性

$.each(jsonData, function(key, getValue){
   console.log($('#myTextfieldID').getValue);
   });

$.each(jsonData, function(key, val){
   console.log($('#myTextfieldID')[getValue]);
   });

但返回的值总是"未定义"

对于舒尔我可以这样做。

switch (getValue)
    {
    case 'text()':
        console.log($('#myTextfieldID').text());
    break;
    case 'val()':
        console.log($('#myTextfieldID').val());
    break;
    }
有人有想法吗?请求帮助

3 个答案:

答案 0 :(得分:0)

因为函数通过变量引用到javascript对象中,所以你可以这样:

{
    "textfield":"text",
    "textfield":"val"
} 

并且:

$.each(jsonData, function(key, val){
   console.log($('#myTextfieldID')[getValue]());
});

答案 1 :(得分:0)

首先 - 如果返回了jQuery对象 - 它没有属性" text()",这就是为什么你得到" undefined"。

JavaScript中的Methonds只是函数类型的对象属性。

因此,在您的情况下,您应该存储属性的名称

jsonData = {
    "textfield":"text",
    "textfield":"val",
    "textfield":"fooBar"
};

然后调用该属性,如果它是'功能'或者以其他方式返回其值

$.each(jsonData, function(key, getValue){
   var d = $('#myTextfieldID')[getValue];
   console.log(d instanceof Function ? d() : d);
});

答案 2 :(得分:0)

得到它,关于变量的attr是什么?喜欢......

{
    "textfield":"text",
    "textfield":"val",
    "textfield":"attr, myAttr",
} 

和......

$.each(jsonData, function(key, val){
   var parts = val.split(",");
   console.log($('#myTextfieldID')[parts[0]](parts[1]));
});

...但这只适用于特殊情况" myAttr",对于我得到的其他人" jQuery.fn.jQuery.init [1]"。 我不能在这个函数中添加一些空变量吗?

这种方式正在发挥......

$.each(jsonData, function(key, val){
   var parts = val.split(",");
   if (parts.length > 1)
      console.log($('#myTextfieldID')[parts[0]](parts[1]));
   else
      console.log($('#myTextfieldID')[parts[0]]());
});

一些html示例

<input type="text" name="appName" value="myApp1" id="appNameID1" />
<input type="text" name="appName" value="myApp2" id="appNameID2" />
<input type="text" name="appName" value="myApp3" id="appNameID3" myAttr="someVal"/>