prototype.js:firefox3で”each is not a function”

Pocket

こんなバッドノウハウを使うことは2度と無いだろうと思ってメモらなかったら、今日思い出せなくて苦しんだので、今度こそメモる。

firefox3で”each is not a function”のエラーが出るときは.getElementsByClassName()を調べること。
firefox3ではgetElementsByClassName()はネイティブ実装されている。そしてこの関数が返す型はfirefox2と3で異なる。

firefox2…HTMLElementのサブインターフェース
firefox3…HTMLCollection

なのでfirefox3ではelements.each(function(element))~みたいな命令がエラーになる。

対処方法は↓このへんがお手軽。
・elements.getElementsByClassName(“hoge”) を$A(“hoge”)に置き換える。
・elements.getElementsByClassName(“hoge”) をelements.select(“.hoge”)に置き換える。
・.eachを使わず、forやwhileで処理する

せっかく処理速度が速くなっているのでなるべくネイティブ実装のgetElementsByClassName()を使ったほうがいいはず。なのでエラーになるところだけ、上記のように書き換える。

ディスカッションに参加

1件のコメント

コメントをどうぞ

esashi へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。 が付いている欄は必須項目です