- ベストアンサー
Arrayオブジェクトとforms配列の操作方法について
- JavaScriptのArrayオブジェクトをカスタマイズして追加したGetFromArray()メソッドでforms配列を操作したいが、エラーが発生する。
- document.formsは配列ではないため、参照することができない
- 他のオブジェクトをカスタマイズする必要があるかもしれない
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
Minefield/Firefox 3.0b2preで再現しました。 http://developer.mozilla.org/en/docs/DOM:document.forms によるとdocument.formsは forms DOM Level 2 HTML: forms に定義されているようでMDCのドキュメントにはNodeListが返るとある一方で http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-1689064 を見ると,HTMLCollectionが返るとあります。 それならば、と HTMLCollection.prototype.GetFromArray = function(func){ //省略 }; と記述してみましたが,結論から言えばこれも失敗です。代入する地点ではエラーが出ないのですが, document.forms.GetFromArray(disp2); でそんな関数はない、と言われます。 ちなみにコレは NodeList.prototype.GetFromArray でも同様の現象になります。 参考: https://bugzilla.mozilla.org/show_bug.cgi?id=300519 https://bugzilla.mozilla.org/show_bug.cgi?id=14869 補足)当方の環境では14869のテストケースで,firstChildはgetElementsByTagNameなんてメソッドを持ちません といわれたので,検証時,document.getElementsByTagNameに書き換えてます で、私自身は良く調べていないので使い方は調べてないのですが, 結局 http://joyeur.com/2006/04/07/joyful-javascript#c000232 等ではラッパー(prototype.js - $A関数)を作成。Arrayに変換) する形を取っているようです
お礼
ご回答ありがとうございました。 コレ周りを取り巻く状況はわかりました。 JSの仕様なのか、実装によるものなのかはわかりませんが (タブン、IEでもエラーとなるのでJSの仕様かも)、 方針を変更したいと思います。