簡體   English   中英

如何使用動態名稱調用jQuery函數?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM