人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

prototype.jsについての質問です。
$('...')で取って来たElementオブジェクトは、prototype.jsで拡張されたメソッドが使用できると有りました。
document.getElementById('...')で取って来たElementは、そのままではそれらの拡張メソッドは使用できませんか?
例えば、prototype.jsがDomのElementクラスを拡張しているとすれば、取って来方に関わらず、全てのElementクラスに拡張メソッドが適用されるように思われるのですが、拡張しているのはDomのElementクラスではないのですか?違うとすれば、DomのElementクラスと、prototype.jsのElementクラスは名前空間(所属しているオブジェクト)的に違っているのでしょうか?また、それぞれの名前空間を教えてください。
コード読めって話なんですが、コード読む前の前知識として知っておきたいと思いました。


●質問者: norisuke3
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:DOM prototype.js オブジェクト クラス コード
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● lang_and_engine
●60ポイント

こんにちは。

こちらの情報が参考になるかもしれません。

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) としてから拡張メソッドを使いましょう、という事だったのでしょうかね?

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ