我无法相信我一直无法找到解决这个问题的方法。它看起来像一个非常“常规”的问题,其解决方案会乱扔垃圾网!
我从数据库查询中返回了这些数组:
var ids = ['12', '15', '40'];
var actions = ['hide', 'show', 'fadeIn'];
我想循环遍历数组并对DOM执行适当的操作,如下所示:
for(var i=0; i < ids.length; i++){
$('#row_'+ids[i]).actions[i]();
}
现在你明白了。实际上我没想到$('#row_'+ids[i]).actions[i]();
按原样工作。我尝试过像
$('#row_'+ids[i]).effect(actions[i]);
无济于事。我相信eval()
应该可以工作,并且(绝望地)甚至尝试过,但无法获得正确的字符串以便它发挥作用。
在Stack Overflow的其他地方,我遇到了使用window
全局解决的类似问题,例如:
var fn = 'hideSomething';
window.fn();//where hideSomething was a defined function.
但是这个定义在jQuery
,而不是window
。
所以我们来了!
答案 0 :(得分:4)
您需要使用[varhere]
按变量名访问属性/方法。由于您的媒体资源名称位于actions[i]
,因此您可以执行此操作:
$('#row_'+ids[i])[actions[i]]();
或者,通过一个稍微简单的方案来完全遵循正在发生的事情:
var method = actions[i];
$('#row_'+ids[i])[method]();
当提前知道属性名称时,您可以使用点语法obj.prop
。如果它在变量中并且未提前知道,则使用obj[prop]
语法。由于方法只是一个属性,因此同样适用于jQuery方法。
for(var i=0; i < ids.length; i++){
$('#row_'+ids[i])[actions[i]]();
}
答案 1 :(得分:1)
使用方括号表示法来访问该属性:
for (var i = 0; i < ids.length; i++) {
$('#row_' + ids[i])[actions[i]]();
}