我有一组已定义的变量。我动态地将一个值设置为另一个变量,该变量最终成为其他一个定义变量的名称。我想这样做,所以我知道在页面上何时使用哪个设置变量。
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变量的值(这将是&#34;某些链接1和#34;),而不是变量的名称?< / p>
如果有更好的方法来尝试完成此行为,我当然会接受其他解决方案。
答案 0 :(得分: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]);
答案 1 :(得分: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]);
答案 2 :(得分: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) );
您正在寻找什么
答案 3 :(得分: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];