$('...')で取って来たElementオブジェクトは、prototype.jsで拡張されたメソッドが使用できると有りました。
document.getElementById('...')で取って来たElementは、そのままではそれらの拡張メソッドは使用できませんか?
例えば、prototype.jsがDomのElementクラスを拡張しているとすれば、取って来方に関わらず、全てのElementクラスに拡張メソッドが適用されるように思われるのですが、拡張しているのはDomのElementクラスではないのですか?違うとすれば、DomのElementクラスと、prototype.jsのElementクラスは名前空間(所属しているオブジェクト)的に違っているのでしょうか?また、それぞれの名前空間を教えてください。
コード読めって話なんですが、コード読む前の前知識として知っておきたいと思いました。
こんにちは。
こちらの情報が参考になるかもしれません。
http://www.greenspace.info/mt/2007/02/27/javascriptproto.html
いままでElementクラスを介して行っていた処理を,その要素自身のメソッドとして扱う事ができるようになり、より直感的にコードを書けるようになりました。(HTMLの DOM要素を直接拡張してるのがちょっとビミョウなんですが...)
ところが、時々 IEでこの拡張が効かなくなる症状に遭遇しました。
また,お手元の環境で,下記のコードを走らせてみて下さい。
<body> <input type="button" value="テスト1" onClick="f()"> <input type="button" value="テスト2" onClick="g()"> <div id="my_div"> </div> <script src="prototype.js"></script> <script language="JavaScript"> function f() { $("my_div").insert("Hello"); } function g() { document.getElementById("my_div").insert("Hello"); } </script> </body>
prototype 1.6.0.1で実行すると,
Firefox3ではテスト1,2ともに「Hello」が表示されますが,
IE7ではテスト2で「オブジェクトでサポートされていないプロパティまたはメソッドです」が出ました。
再び、ご返答ありがとうございます。
私の手元のIE7で試してみた所、テスト1, 2共にHelloと表示されました。また、リンク先のinnerHTMLのテストを行った所、記述されているFirefoxの3つのFilureと同じFailure がIEでも表示されました。(ちなみにSafariでも同様の結果)
ひょっとするとIEで修正が入ったのかもしれませんね。
私のIEのバージョンは、7.05730.13 で、prototype.jsのバージョンは、1.6.0.3です。
要はIEの方で以前問題が有ったので Dom Element を使用するときは、Element.extend(element) としてから拡張メソッドを使いましょう、という事だったのでしょうかね?