0

我有一组定义的变量。我动态地将一个值设置为另一个变量,该变量最终成为其他已定义变量之一的名称。我想这样做,所以我知道何时在页面上使用哪个设置变量。

var mwm = "blah"
var vp = "bleh"
var am = "bluh"

var mwm720 = "some link 1"
var mwm717 = "some link 2"
var vp720 = "some link 3"
var vp717 = "some link 4"
...

然后我运行了一些其他脚本,并根据条件将变量值设置为其他变量之一的名称。

var myClass = $(this).attr("class").split(' ')[1];
var currDiv = "div." + myClass;
var currVersion = $(this).parent().attr("id");
var linkVers = myClass + currVersion;

linkVers 变量值总是以“mwm720”、“mwm717”、“vp720”等结束。这就是我知道何时使用 mwmw720 或 mwm717(等)变量的方式。

期望的行为

如何获得警报/调用以使用存储在动态变量中的变量名称的值?

假设alert(linkVers);返回“mwm720”。如何$(currDiv).html(linkVers);插入 mwm720 变量的(即“某些链接 1”),而不是变量的名称?

如果有更好的方法来尝试完成此行为,我当然会考虑其他解决方案。

4

4 回答 4

5

您应该将所有变量放在 1 个对象中。像:

var messsages = {
    wm : "blah",
    p : "bleh",
    m : "bluh",

    wm720 : "some link 1",
    wm717 : "some link 2",
    p720 : "some link 3",
    p717 : "some link 4"
}

然后在您的功能中,您可以使用

alert(messages[linkVers]);
于 2013-01-18T18:29:22.583 回答
0

最好不要在窗口命名空间中塞满一堆变量。使用一个对象。

var myProps = {
    mwm720 : "some link 1",
    mwm717 : "some link 2",
    vp720 : "some link 3",
    vp717 : "some link 4"
};

比你能做的

var foo = "mwm720";
console.log(myProps[foo]);

如果您真的想按照自己编写的方式进行操作,则可以使用带有括号符号的窗口。

var foo = "mwm720";
console.log(window[foo]);
于 2013-01-18T18:29:56.413 回答
0

我认为您正在寻找的是eval

var myvar = "mvm720";
var mvm720 = "some link 1";

console.log(myvar);  // prints mvm720
console.log(eval(myvar));  //prints "some link"

所以在你的特殊情况下:

eval ( $(currDiv).html(linkVers) ); 

是你要找的

于 2013-01-18T18:30:24.147 回答
0

一种更灵活的方法是按版本对变量进行分组。这样,您甚至不必担心将名称与版本连接起来。

var messsages = {
    720: {
        wm: "some link 1",
        p: "some link 3",
    },
    717: {
        wm: "some link 2",
        p: "some link 4",
    }
};

然后,您可以获得正确版本的链接文本:

var linkVers = messages[currVersion][myClass];

由于在currVersion脚本的整个生命周期内都不会更改(因为您停留在同一页面上),您还可以在开始时缓存当前版本的消息。这样,您就不需要经常查找父母的id

// In some high scope
var currMessages;

// At startup (e.g. DOM ready)
// You probably need to slightly adjust this
// depending on what $(this).parent() actually signifies
var currVersion = $(this).parent().attr("id");
currMessages = messages[currVersion];

// When retrieving the link text
var linkVers = currMessages[myClass];
于 2013-01-18T18:47:10.253 回答