【问题标题】:How to change variable content getting the variable name from a data-attribute in a loop?如何更改变量内容从循环中的数据属性获取变量名称?
【发布时间】:2017-10-05 10:50:08
【问题描述】:

我有一个循环来检查元素的数据属性的内容,然后使用该内容在 switch 函数中匹配它。我想简化此代码,因为数据属性值在未来可能会有所不同,并且每次我必须向开关添加案例时。 我现在拥有的(这很好用):

var a = $('#el').attr('data-x'); // String
for (var i = 0; i <= 2; i++) {
    switch (a) {
        case "abc":
            abc++; // variable initially set to 0
            $('#abc').text(abc); // Overwrite the content with the new value
            break;
        case "dfg":
            dfg++;
            $('#dfg').text(dfg);
            break;
[ ...Many cases like the ones listed here ]
            }
if (i === 0) { a = $('#el').attr('data-x1')} 
else if (i === 1) { a = $('#el').attr('data-x2');} 
else if (i === 2) { a = $('#el').attr('data-x3');}
}

我想要实现的是取 'a' 值,使用取值作为 var 名称,然后处理变量内容。

编辑:主要是我需要一个不依赖于案例的函数,我在上面的代码中使用的方式现在还可以,但每 2 个月我必须添加另一个案例以使其工作。问题是:如何更改我上面的代码,使其在更少的代码行中更“通用”和“优雅”?

类似:

var a = $('#el').attr('data-x');
for (var i = 0; i <= 2; i++) {
     a++; // 'a' must be the name of the var, the name of the variable it's the same as $('#el').attr('data-x').
          // So, 'a' var will change every time the function it's executed as in the switch version of the first block of code above (abc++ or dfg++).
     $('#'+a).text(a);
if (i === 0) { a = $('#el').attr('data-x1')} 
else if (i === 1) { a = $('#el').attr('data-x2');} 
else if (i === 2) { a = $('#el').attr('data-x3');}
}

这就是我的问题:'a' 将是一个字符串(例如'abc'),abc 是一个全局变量,其数字需要递增并放在 $('#abc') 中。例如,这里有:

abc = 0; (global var)
a = abc; (scoped var)
abc++; (abc === 1)
$('#abc').text(abc); (equivalent to $('#abc').text(1);)

所以我需要在循环中调用 'a' 值作为全局 var 的名称,将其递增,然后使用 'a' 作为 jquery 选择器,将其内部递增的全局 var 的值写入文本。 我怎样才能做到这一点?

【问题讨论】:

  • 你能告诉你从这段代码中得到了什么错误以及做a++的目的是什么?
  • 第一段代码运行正常,我不知道如何更改由另一个变量的内容命名的变量
  • 你能说出做a++;的目的是什么吗?我认为你不需要增加 a 来匹配第一块代码的功能。
  • A 它只是为了说:“var 的名称与 data-x 值相同”
  • “我不知道如何更改由另一个变量的内容命名的变量” - stackoverflow.com/questions/5187530/…

标签: javascript jquery loops variables


【解决方案1】:

如果我明白你需要做什么,你应该尝试使用eval()

eval() 函数评估表示为字符串的 JavaScript 代码。

var a = $('#el').attr('data-x');
for (var i = 0; i <= 2; i++) {
    eval(a + "++");
    $('#'+a).text(eval(a));
    if (i === 0) { a = $('#el').attr('data-x1')} 
    else if (i === 1) { a = $('#el').attr('data-x2');} 
    else if (i === 2) { a = $('#el').attr('data-x3');}
}

【讨论】:

  • 我能解释一下 -1 吗?
  • 否决问题和答案这是本网站的一项常见运动,不知道为什么...
  • 我已经(再次)编辑了这个问题,从一开始就很混乱,对不起!
猜你喜欢
  • 1970-01-01
  • 2019-01-31
  • 1970-01-01
  • 2016-06-02
  • 1970-01-01
  • 2014-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多