我正在使用jQuery,通过循环构建表。我认为最好的方法是创建一个数组,然后执行$(blah).html(table);
var settings_table = '<open the table>';
$.each(settings, function(i, val){
var settings_table = settings_table+'<put stuff in it>';
});
var settings_table = settings_table+'<close it>';
$('#rscc_opts').html(settings_table);
但这不起作用。我假设我做错了。或者你能建议一个更好的解决方案?我的数组形成如下:
var settings = [
{
var1: 'foo',
var2: 'foo',
},
{
var1: 'foo',
var2: 'foo',
}
];
答案 0 :(得分:5)
这里的主要问题。
每当您说“var settings_table”时,您都会隐藏变量。除了settings_table的第一个声明外,除去“var”关键字。
答案 1 :(得分:0)
扩展iftrue的答案:
第一次声明变量时,如果不指定“var”,则说明它是一个全局变量。
如果使用“var”关键字,则该变量将“限定”为该特定函数。这意味着它的数据只能由该函数内的代码访问。这意味着该函数之外的任何内容都无法访问该变量。另一个函数可以定义具有相同名称的相同变量,并且它可以存储完全不同的值。
$.each(settings, function(i, val){
var settings_table = settings_table+'<put stuff in it>';
});
这里的技巧是你要定义一个新的匿名函数供迭代器使用。此函数具有自己的范围(它自己的个人数据)。这意味着通过声明“var settings_table”,您说“创建一个全新的变量,特定于此功能”。所以,你实际上做的是将表数据分配给一个全新的变量,然后在循环的下一次迭代中丢失数据。如果我们将其重写为:
,这可能会更清楚function BuildTable(i, val){
var settings_table = settings_table+'<put stuff in it>';
}
$.each(settings, BuildTable);
你真正想要做的事情可能有点棘手,它被称为“封闭”。闭包是一个高级的JavaScript主题。但是,在本质上,你所做的是说“嘿,我想让这个匿名函数可以访问我的个人数据”
在您的情况下,您想要做的是:
var settings_table = '<open the table>';
$.each(settings, function(i, val){
settings_table = settings_table+'<put stuff in it>';
});
settings_table = settings_table+'<close it>';
$('#rscc_opts').html(settings_table);