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 Comments

  • esashi (#)
    7月 3rd, 2009

    ありがとうございます。
    悩んでました

コメントを残す

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