Safari3 for windows と getElementsByTagName と for…in
結論
- いろいろ言われているとおり、配列の走査にはfor(var i=0;i
- getElementsByTagName の戻り値は配列とは違う。ブラウザごとにちょっとずつ違う
経緯など
Safari3betaをインストールし自分のサイトを見たところ、正常に動作していないスクリプトがあることに気づきました。
var elements=document.getElementsByTagName("div"); for(var i in elements){ if(elements[i].className && elements[i].className="hoge"){ //いろいろ操作 } }
IE,Firefox,Operaだと上のようなコードでも希望の動きをします。
iには length なども入りますが、配列の添え字もきちんと入ります。
しかしSafariの場合、変数iには length と item が入るだけで、配列の添え字は入りません。
普通の配列ではどうか確かめてみると、
var arr=[10,9,8]; arr["hoge"]="foo"; for(var a in arr){ alert(a) // 0,1,2,hoge }
配列であれば、Safariでも期待した動作をします。