我正在尝试简化一些代码,除了我显然只是创建一个字符串而不是访问相应变量的值。如何将 'total_' + animal
转换为我可以访问的变量,以便动态地将结果分配给DIV?
JS:
function tallyAnimals(animal) {
total_animal++;
if (animal == "dog") { total_dog++; }
if (animal == "cat") { total_cat++; }
if (animal == "bird") { total_bird++; }
if (animal == "fish") { total_fish++; }
//The problem line
$('#' + animal).html('total_' + animal);
}
HTML:
<div id="animals">
<div id="dog">0</div>
<div id="cat">0</div>
<div id="bird">0</div>
<div id="fish">0</div>
</div>
答案 0 :(得分:2)
因为'total _'+动物看起来是全局的,没有eval:
var function tallyAnimals(animal) {
total_animal++;
if (animal == "dog") { total_dog++; }
if (animal == "cat") { total_cat++; }
if (animal == "bird") { total_bird++; }
if (animal == "fish") { total_fish++; }
//The problem line
$('#' + animal).html(window['total_' + animal]);
}
should work
编辑:
理想情况下,您不应使用全局变量,并将“总计”+动物变量附加到精确范围。
前:
在函数tallyAnimal之外的文件中某处:
var totals = {
dog:0,
cat:0,
...
}
所以你可以写
$('#' + animal).html(totals[animal]);
答案 1 :(得分:1)
您可以使用 eval()功能。这是解决方案:
function tallyAnimals(animal) {
total_animal++;
if (animal == "dog") { total_dog++; }
if (animal == "cat") { total_cat++; }
if (animal == "bird") { total_bird++; }
if (animal == "fish") { total_fish++; }
$('#' + animal).html(eval('total_' + animal));
}
Eval是为这种工作而制作的!这样做你也可以使用更少的行:
function tallyAnimals(animal) {
total_animal++;
eval("total_"+animal."++");
$('#' + animal).html(eval('total_' + animal));
}