TOPシステム開発> 要素の拡張
まるごとJavaScript&Ajax!
JavaScriptを洗練させるPrototype.js

第6回:DOMの拡張(前編)
著者:ガイアックス  天野 仁史   2007/3/12
前のページ  1  2
要素の拡張

   要素を取得する2つの関数を紹介しました。しかし、これらの関数の機能は実はこれだけではありません。これらの関数は取得した要素に便利なメソッド群を追加して返してくれるのです。つまり、この関数で取得した要素はメソッドが拡張されたPrototype.js仕様の要素になっているのです。

   例えば、要素にイベントハンドラを登録する場合を考えてみましょう。通常のJavaScriptの場合は、リスト21のように書きます。ブラウザー判別をして、ブラウザーごとのイベント登録方法でイベントを登録しなければならないのです。
リスト21:要素にイベントハンドラを登録($$関数を使わない場合)
<div>hoge</div>
<div>hoge</div>
<div>hoge</div>
<script type="text/javascript">
var elements = document.getElementsByTagName('div');
var eventHandler = function() {
   alert(' 要素がクリックされました');
};

for (var i = 0; i < elements.length; i ++) {
   if (navigator.appVersion.match(/\bMSIE\b/)) { // IE の場合の処理
      elements[i].attachEvent('onclick', eventHandler);
   }
   else {
      elements[i].addEventListener('click', eventHandler, false);
   }
}
</script>

   しかし、これではコードが非常に繁雑になってしまいます。なんとかならないのでしょうか。そこで、先ほどのメソッドの拡張です。$$関数や$関数を用いて要素を取得した場合はリスト22のように書くことができるのです。

リスト22:要素にイベントハンドラを登録($$関数を使った場合)
<div>hoge</div>
<div>hoge</div>
<div>hoge</div>
<script type="text/javascript">
var elements = $$('div');
var eventHandler = function() {
   alert(' 要素がクリックされました');
};

for (var i = 0; i < elements.length; i ++) {
   elements[i].observe('click', eventHandler);
}
</script>

   かなりシンプルになったと思いませんか。

   このようなことができるのは、$$関数によって要素に新しいメソッドobserveが追加されたからなのです。このように、$関数や$$関数は要素を取得した後のことまでしっかりと考えてくれるのです。


次回は

   次回は$関数や$$関数によって追加されるメソッドの一覧や$関数、$$関数を使わずに取得した要素にメソッドを利用したい場合について解説します。また実用的なクラスを作っていきます。

前のページ  1  2

株式会社ガイアックス 天野 仁史
著者プロフィール
株式会社ガイアックス   天野 仁史
渋谷で働くWebプログラマ。出身は石川県金沢市。21歳でプログラミングに出会い、IT戦士になることを決意。それからというもの、寝ても覚めてもプログラムを書き続け今に至る。はてなでamachangというidでブログを書いてます。

IT戦記
http://d.hatena.ne.jp/amachang/


INDEX
第6回:DOMの拡張(前編)
  DOMの拡張
要素の拡張