2010-08-25 75 views
4

我有以下循環:迭代過jquery對象返回字符串而不是DOM元素

for(var myScreen in wizardScreens){ 
    if(step==index)$(myScreen).show(); 
    else $(myScreen).hide(); 
    index++; 
} 

wizardScreens被定義爲$(".wizardScreen", wizard);,其中wizard是DOM元素。在循環中,myScreen被設置爲一個字符串,而不是一個DOM元素。任何人都可以解釋爲什麼會發生?

回答

3

jQuery的收藏已經有一個內置的迭代函數:

wizardscreens.each(function (index, screen) { 
    if (index == step) 
    $(screen).show(); 
    else 
    $(screen).hide(); 
} 

或者甚至爲您更好地使用:

var activescreen = wizardscreens.eq(step); 
activescreen.show(); 
wizardscreens.not(activescreen[0]).hide(); 

這就完全避免了明確的迭代。

1

一般來說,答案是.each,但是它會爲每個DOM元素調用一個函數,這比使用一次處理jQuery對象中的所有節點的jQuery函數要慢,所以最好儘可能避免它。在這種情況下,它是絕對有可能的:

wizardScreens.hide().eq(step).show(); 
+0

謝謝(我沒有意識到'eq'函數)。我沒有在所有對象上使用'隱藏',因爲我想100%確定該對象不會因被隱藏而閃爍,然後再次出現 – Casebash 2010-08-25 06:19:37

+0

DOM更改將僅在腳本之後生效(實際上,所有腳本都安排在同時,例如所有爲該操作和所有'setTimeout(foo,0)'調用觸發的事件處理程序已完全運行,因此不會有閃光。 – Tgr 2010-08-25 06:33:28

+0

此行爲是否記錄在案? – Casebash 2010-08-25 06:35:28

相關問題