Místo new Array() bych osobně všude použil literál []. Na funkci to nemá vliv, je to ale přehlednější. Stejně tak místo přidávání prvků do pole po jednom indexu bude zase přehlednější literál:
array = [
prvek,
prvek,
prvek,
...
]
Array.prototype.forEach chybí v IE8 a nižších. Když už používáš jQuery, tak můžeš pole radši iterovat pomocí $.each(), nebo využít toho, co už jsi sám zjistil - jQuery při zavolání některých metod používá iteraci všech vybraných prvků interně samo o sobě.
Minule jsem se ti snažil vysvětlit, že atribut "display" a CSS vlastnost "display" nemají vůbec nic společného. Zkusím to rozepsat trochu víc. Mějme element #test:
<div id="test">test</div>
po zavolání $('#test').attr('display', 'none'); bude výsledek vypadat takhle:
<div id="test" display="none">test</div>
po zavolání $('#test').css('display', 'none'); to bude vypadat následovně:
<div id="test" style="display: none;">test</div>
V prvním případě to může fungovat jedině, pokud máš někde ve stylech zašitou podobnou deklaraci(což by ovšem bylo dost nesmyslné počínání):
[display="none"] {
display: none;
}
Samo o sobě to ale nedělá lautr nic.