使用类名调用同名变量

时间:2014-09-03 10:42:29

标签: javascript jquery html css

我有一个带有“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而不是数字

有没有办法让它把它作为相关变量读取?

由于

1 个答案:

答案 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);
});