我有一个带有“dot”类的div列表,以及每个城镇名称的不同类别(例如,伦敦,格拉斯哥等)。
我正在尝试将第二个类名称用作函数中的变量。如果我将第二个类名回显到函数中,它将它读作一个字符串,而不是代表一个数字的变量......
var resize = function () {
$('.dot').each(function () {
uniName = $(this).attr('class').split(' ')[1];
uniNameMargin = uniName / 2 - uniName;
$('.' + uniName).animate({
width: uniName,
height: uniName,
marginLeft: uniNameMargin,
marginBottom: uniNameMargin
}, 300);
});
目前这个公式试图将这些单词用作数字并返回大量的NaN而不是数字
有没有办法让它把它作为相关变量读取?
由于
答案 0 :(得分:2)
您没有告诉我们这些变量的定义,但我认为它们是全局变量。如果是这样,它们也是全局对象的属性,在Web浏览器中属于window
属性。
如果您将对象的属性名称作为字符串,则可以使用方括号表示法访问该属性:
var my_object;
my_object.london = 1;
var property_name = "london";
console.log( my_object[property_name] ); // Will log 1 to the console
所以,你可以像这样访问变量的值(正如我所说,假设它们是全局变量):
uniName = $(this).attr('class').split(' ')[1]; // After this line, I’m assuming uniName has a value like "london"
var uniNumber = window[uniName];
uniNameMargin = uniNumber / 2 - uniNumber; // Here, we use [] notation to access the "london" property of the window object. If you have a global variable called "london" with a numerical value, this should now work.
我还注意到$('.dot').each
函数中的变量未使用var
在函数中声明。如果这些变量已经在更高的范围内声明,那么很酷,但是如果它们仅在该函数中使用,则应该使用var
关键字在该函数中声明它们,这样就不会污染父项或者您不需要的变量的全局范围:
$('.dot').each(function () {
var uniName = $(this).attr('class').split(' ')[1];
var uniNumber = window[uniName];
var uniNameMargin = uniNumber / 2 - uniNumber;
$('.' + uniName).animate({
width: uniName,
height: uniName,
marginLeft: uniNameMargin,
marginBottom: uniNameMargin
}, 300);
});