【发布时间】: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