[英]How do I call a jQuery function with a dynamic name?
我無法相信我一直無法找到解決該問題的方法。 在我看來,這是一個非常“常規”的問題,其解決方案會使網絡亂七八糟!
我有從數據庫查詢返回的這些數組:
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()
應該可以工作,並且(絕望地)嘗試了一下,但是無法獲得正確的字符串來工作。
在堆棧溢出的其他地方,我遇到了使用全局window
解決的類似問題,例如:
var fn = 'hideSomething';
window.fn();//where hideSomething was a defined function.
但這是在jQuery
而不是在window
上定義的。
所以我們到了!
您需要使用[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]]();
}
使用方括號符號以訪問屬性:
for (var i = 0; i < ids.length; i++) {
$('#row_' + ids[i])[actions[i]]();
}
請參閱: JS中的屬性訪問器(MDN)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.