如何使用动态名称调用jQuery函数?

3

我无法相信我一直未能找到解决此问题的方法。在我看来,这是一个非常“常见”的问题,它的解决方案应该遍布整个网络!

我从数据库查询中获取了这些数组:

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上定义的。

所以我们就到这里了!


复制:https://dev59.com/cXNA5IYBdhLWcg3wa9Kp - adeneo
@adeneo:我在你链接的网页上没有看到太多关于jQuery的讨论。 - Ifedi Okonkwo
访问对象的属性是一样的,无论使用jQuery与否。 - adeneo
是的,我想是这样的。有时候,宝宝需要喂食,你知道的。 - Ifedi Okonkwo
哈巴!为什么那个人删除了他的回答?可惜,因为简洁是许多人(包括我在内)经常会发现有吸引力的东西。 - Ifedi Okonkwo
2个回答

5
您需要使用[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]]();
}

感谢您快速、有帮助且详尽的回复。我想“详尽”这个词让您赢得了认可! - Ifedi Okonkwo

2

感谢您的快速和有帮助的回复。 - Ifedi Okonkwo
谢谢你恢复了文件 ;) - Ifedi Okonkwo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接