我正在尝试根据变量名在主div中设置内容。例如,如果我运行:changeMain(nearbyCows)
我希望看到' tehe'而是看起来窗口[页面]未定义。有什么想法吗?
function changeMain(page) {
var nearbyCows = "<a>tehe</a>";
var nearbyChickens = "<b>lol</b>";
var search = "<i>meh</i>";
$("main").html(window[page]);
}
答案 0 :(得分:1)
您正在函数范围内创建此变量。 window
的属性指的是全局范围。如果要使用这样的全局范围,则需要将变量声明移出函数:
var nearbyCows = '<a>tehe</a>';
var nearbyChickens = '<b>lol</b>';
var search = "<i>meh</i>";
function changeMain(page) {
$("main").html(window[page]);
}
但是,那么你基本上只是使用window
作为查找哈希,并且保持自己的查找对象而不是选择全局更好更清晰。
例如:
var MainChanger = {
nearbyCows: '<a>tehe</a>',
nearbyChickens: '<b>lol</b>',
search: "<i>meh</i>",
change: function(page) {
$('#main').html(this[page]);
}
};
MainChanger.change('nearbyCows');
答案 1 :(得分:0)
var nearbyCows
未在全局范围内定义,而是作为局部变量定义,请使用:nearbyCows = "<a>tehe</a>";
而不使用指令var
。
答案 2 :(得分:0)
使用对象,而不是单独的变量:
function changeMain(page) {
var items = { nearbyCows: "<a>tehe</a>",
nearbyChickens: "<b>lol</b>",
search: "<i>meh</i>"
};
$("#main").html(items[page]);
}
然后你可以这样称呼它:
changeMain('nearbyCows');
答案 3 :(得分:0)
你必须知道有多种类型的变量。
你有一个分配窗口的全局变量(不是一个好习惯)。你可以这样声明:
window.varName = ...;
window['varName'] = ...;
varName = ...;
存在变量范围,这是声明变量的常用方法:
var varName = ...;
这些变量可由内部范围访问,但外部范围不可访问。
还有对象属性。您创建一个对象并分配值:
var obj = {};
obj.varName = ...;
obj['varName'] = ...;
如果你看到,你无法使用动态字符串访问范围变量,则需要对象或全局变量。 :
function changeMain(page) {
//Global variable, not recommended
window.nearbyCows = "<a>tehe</a>";
window.nearbyChickens = "<b>lol</b>";
window.search = "<i>meh</i>";
$("main").html(window[page]);
}
或:
var obj = {} //Declare outside if you want to access it outside the function
function changeMain(page) {
// var obj = {}; //or inside if you want it to be a private variable
//Object properties, recommended
obj.nearbyCows = "<a>tehe</a>";
obj.nearbyChickens = "<b>lol</b>";
obj.search = "<i>meh</i>";
/*Alternative declaration, faster to process :
obj = {
nearbyCows : "<a>tehe</a>",
nearbyChickens : "<b>lol</b>",
search : "<i>meh</i>"
}*/
$("main").html(obj[page]);
}