【連載】
Prototype.jsは、Sam Stephenson氏を中心とするチームによって開発されているAjax対応JavaScriptライブラリだ。単体でもAjaxian.comの2006年と2007年の調査で最もよく知られたAjaxフレームワークに選ばれるほどの人気を得ているが、実はWebアプリケーション・フレームワークRuby on Railsのプロジェクトで開発されているプロダクトであり、同フレームワークに同梱されているため、Ruby on Rails経由で使用されるケースも多い。
ライブラリはMITライセンスで公開され、ドキュメントはクリエイティブ・コモンズ(Creative Commons)ライセンスのAttribution-Share Alike 3.0で公開されている。詳細はライセンスのページで確認していただきたい。
これから6回にわたって、このPrototype.jsを使うにあたって基本となることを紹介していく。本稿が読者のAjaxアプリケーションの構築に役立てば幸いである。
ライブラリは、ダウンロードページからprototype.jsというファイルをダウンロードしたら、解凍などをせずにそのまま利用できる。容量は約127KBと小さい。
Webページで利用するには、HTML文書の<script>タグにファイル名などを記述しておけばよい(以下参照)。
<script type="text/javascript" src="《ディレクトリ》/prototype.js"></script>
利用する前には、HTML内に記述されるディレクトリ名に間違いがないかをよく確認しておこう。なお、本稿ではIE6、Firefox2、Safari2以上をサポートするバージョン1.6を用いるが、連載中にバージョンアップした場合はそれに変更する可能性がある。
Prototype.jsでは、よく用いるメソッドを短く記述できるようにしていたり、documentなどのJavaScriptの既存オブジェクトに対して、より便利な操作ができるようにする拡張が施されている。今回は前者にあたる、名前が$で始まるメソッドを紹介したい。なお、特別なことがない限り、省略可能な記述は[ ~ ]で表す。
$()は、HTMLタグ(DOMオブジェクト)を表すもので、引数にはid属性の値やDOMオブジェクトを設定する。引数は複数になってもよい。戻り値のDOMオブジェクトはPrototype.jsによる拡張が施されたものになる。
リスト1に複数の<div>タグによる画面表示を隠す(display : noneとする)例を示す。
$( 'div1', 'div2', 'div3' ).invoke( 'hide' ); // $( 'div1' ).hide(); は可能
<div id="div1">マイコミジャーナル</div>
<div id="div2">いまからはじめるPrototype.js</div>
<div id="div3">Prototype.jsの概要と$で始まるメソッド</div>
バージョン1.5から追加されたもので、CSSセレクタに該当するDOMオブジェクトを取得する。CSSセレクタとは、CSSプロパティ設定の先頭に記述される#idvalueや.classなどのことだ。バージョン1.5.1以降では、CSS 2.1の属性セレクタやCSS3の擬似クラス(pseudo-class)もサポートしている。サポート範囲の詳細は、この関数のドキュメントを参照していただきたい。
リスト1と同様の処理をCSS3の属性セレクタで記述するとリスト2のようになる。
$$( 'div[id^="div"]' ).invoke( 'hide' ); // $$( 'div[id^="div"]' ).hide()は不可
実行される<div>タグの例はリスト1参照
$A()はコレクションオブジェクトを配列として取得する。コレクションオブジェクトとは、複数の要素を持つオブジェクトのことをいう。たとえば関数の引数群を表すargumentsやdocument.getElementsByTagName()の戻り値などがそれにあたる。コレクションオブジェクトを配列にしておくと、JavaScriptやPrototype.jsで用意されている配列のための便利なメソッドが利用できる。リスト3はすべての<div>をDOMオブジェクトの配列として取得する例だ。
$A( document.getElementsByTagName( 'div' ) )
フォームで選択された値を取得する。Form.Element.getValue()を短縮したものだ。
$F( 'place' )
<select id="place">
<option value="1">渋谷
<option value="2" selected>代官山
<option value="3">表参道
</select>
Hashオブジェクトを生成する。1.6以前のバージョンとは互換性がなく、リスト5に示す新たなメソッドが定義されたので注意が必要だ。詳細はHashオブジェクトのドキュメントを参照していただきたい。
var h = $H();
h.set( 'place', '代官山' ); // 両者を一対の値として設定
var p = h.get( 'place' ); // p == '代官山'
ObjectRangeオブジェクトとは、始端から終端までの範囲を表すもので、繰り返し(each)や判定(include)で用いると便利だ。始端と終端はリスト6で示すように数値や文字が指定できる。
$R( 0, 10 ) 0から10までの範囲
$R( 0, 10, true ) 0から9までの範囲
$R( 'a', 'd', true ) 'a', 'b', 'c'
$R( 'あ', 'ん' ) 'あ'から'ん'(文字コード順)
文字列に半角の空白が混じっているとき、それで区切られた語句を要素とする配列を取得する。リスト7に複数のタグをIDで指定して表示する例を示す。
$w( 'div1 div2 div3' ).each( function( tagId ) {
$( tagId ).style.display = 'block';
} );
実行される<div>タグの例はリスト1参照
今回は、Prototype.jsでよく用いられる$で始まるメソッドを紹介した。アプリケーションのソースコードでこれらを見かけたときは、上記を思い出していただきたい。
| 花粉の運び屋“マルハナバチ”の国勢調査 [18:11 5/24] |
| 「Arid5a」は自己免疫疾患を引き起こすカギ分子の可能性大 - 阪大 [17:39 5/24] |
| 岡山大、中枢神経の「ランビエ絞輪」形成機構の解明に1歩前進 [17:35 5/24] |
| 細胞間接着を担うタンパク質「クローディン」に関する発見 - 阪大など [17:32 5/24] |
| パナソニック、LEDに匹敵する照明用高効率白色有機EL素子を開発 [17:29 5/24] |
|
[秘密結社 鷹の爪]LINEスタンプ第2弾が登場! [14:00 5/25] ホビー |
|
「義風堂々」声優発表、兼続は浪川大輔、慶次は佐藤拓也 [13:39 5/25] ホビー |
|
[アニメ質問状]「聖☆おにいさん」 森山未來と星野源の絶妙な掛け合いに注目! [13:30 5/25] ホビー |
|
「こちらがこのバーのマスターです」というときの「This is the master of this bar.」【うっかり使うとアブナイ英語】 [13:30 5/25] ライフ |
|
失礼に当たる、お客様の見送り方はどれ?【今さら聞けない社会人のマナー】 [13:30 5/25] キャリア |