Javascript 根据变量名称将变量设置为已存在的变量
假设在呈现页面时,我有一个如下所示的变量:Javascript 根据变量名称将变量设置为已存在的变量,javascript,jquery,Javascript,Jquery,假设在呈现页面时,我有一个如下所示的变量: var test1='这是一个html字符串' 我有一个函数,看起来像: function addRow(v) { $.each(v, function (k,v) { if (k == 'jsvar') { cableHTML = 'test1' insertCabling(parentId, cableHTML) } }); } cableHTML设置的变量取决于js
var test1='这是一个html字符串'
我有一个函数,看起来像:
function addRow(v) {
$.each(v, function (k,v) {
if (k == 'jsvar') {
cableHTML = 'test1'
insertCabling(parentId, cableHTML)
}
});
}
cableHTML
设置的变量取决于jsvar
的值。因此,它将根据选择的内容而变化
test1
可能是test2
,或者其他东西。test1/test2/test3等,在页面加载时都作为变量存在。jsvar
的值对规定了cableHTML
需要的变量
我想将
cableHTML
设置为较早加载的test
变量。(希望)有一种简单的方法来实现这一点吗?您需要去掉代码中test1
和jsvar
的引号,除非您希望k等于字符串'jsvar'
,并且希望cableHTML等于'test'
var test1 = 'this is a string of html';
function addRow(v) {
$.each(v, function(k,v) {
if (k == jsvar) {
cableHTML = test1
insertCabling(parentId, cableHTML)
}
});
}
根据您所说的“jsvar的值对指示变量cableHTML
需要是什么”,假设值为test1
,test2
,等等。您可以这样做:
function addRow(v) {
$.each(v, function (k,v) {
if (k == 'jsvar') {
cableHTML = eval("v");
insertCabling(parentId, cableHTML)
}
});
}
但最好使用数组(eval()
和索引变量名是您应该尽量避免的),并执行以下操作:
function addRow(v) {
$.each(v, function (k,v) {
if (k == 'jsvar') {
cableHTML = myArray[v];
insertCabling(parentId, cableHTML)
}
});
}
其中jsvar
的值是myArray
数组中所需项目的键
另外,如果您没有在这个范围内的其他地方声明var cableHTML
,那么您就是在将其作为参数传递给insertCabling()
时,我假设您不想要/需要一个全局变量,只需将var
添加到cableHTML=…
另外,在进一步查看代码之后,似乎没有必要使用
each()
:
function addRow(row) {
if(row["jsvar"]){
insertCabling(parentId, row["jsvar"]);
}
}
只要它在范围内。。。只需删除test1周围的引号。另外,您是否意识到您正在使
cableHTML
成为一个全局变量?对不起,我没有包含重要信息--test1可能是test2,或者其他什么。Test1/test2/test3等,在页面加载时都作为变量存在。“jsvar”的值对指定了cableHTML需要的变量,就像您应该使用数组而不是多个索引变量名一样。然后执行类似于cableHTML=testArray[v]的操作代码>重要问题-从哪里知道要分配哪个变量?测试1,测试2还是测试3?我想斯默尼说的很对…谢谢。这正是我需要的。我试着做了一个数组。。但是我正在编写的代码太旧太难看了,很难做得更好。@RickyMason,我不确定你是否看到我在我的答案中添加了内容(关于删除each()
循环)。如果您正在使用eval()
(您不应该这样做),您可以这样做来代替整个each()
块:尝试{(row[“jsvar”]&&insertCabling(parentId,eval(row[“jsvar”]);}catch(e){}
。另请注意,我将addRow()
参数名称更改为行
。谢谢。我在你建议的改变中工作过,现在效果很好。