連載:jQuery Mobile入門

第1回 jQuery Mobileページの基本構造を理解しよう

山田 祥寛
2012/01/20
Page1 Page2 Page3

jQueryアプリケーションを複数ページに対応する

 先ほども述べたように、jQuery Mobileでは1つの.htmlファイルで複数のページを表現するのが一般的である。さっそく、先ほどのサンプルを複数ページに対応させてみよう。

<div id="basic" data-role="page" data-title="jQuery Mobile入門">
  <div data-role="header">
    <h1>jQuery Mobile入門</h1>
  </div>
  <div data-role="content">
    <p>こんにちは、jQuery Mobile!</p>
  </div>
  <div data-role="footer">
    Copyright 1998-2012, WINGS Project
  </div>
</div>

<div id="ui-elm" data-role="page" data-title="jQuery MobileのUI要素">
  <div data-role="header">
    <h1>jQuery MobileのUI要素</h1>
  </div>
  <div data-role="content">
    <p>jQuery Mobileにはリストビューやボタンなどの部品があります。</p>
  </div>
  <div data-role="footer">
    Copyright 1998-2012, WINGS Project
  </div>
</div>

<div id="app" data-role="page" data-title="応用アプリケーション">
  <div id="app" data-role="header">
    <h1>応用アプリ</h1>
  </div>
  <div data-role="content">
    <p>応用アプリとしてTwitter連携アプリを作成してみましょう。</p>
  </div>
  <div data-role="footer">
    Copyright 1998-2012, WINGS Project
  </div>
</div>
複数ページに対応したjQuery Mobileページのコード例(<body>要素内を抜粋)

 先ほども述べたように、複数ページに対応するには「data-role属性がpageである要素」をページの数だけ列挙するだけなので、特に難しいことはない。ただし、以下のような注意点もあるので留意しておきたい。

(1)ページは常に並列の関係にあること

 ページ同士は常に並列でなければならない。例えば、ページの中に入れ子にページを配置することはできない。

(2)ページには一意なid値が必須

 後からページを識別できるように、それぞれの要素にはid属性を明記しておく必要がある。さもないと、後からjQuery Mobileがページを遷移する際に、対象のページを特定できないためだ。

(3)ページ・タイトルはdata-title属性で定義する

 jQuery Mobileでは、ページを遷移する際に、<title>要素で指定されたタイトルを、ページのdata-title属性で上書きする。ただし、その性質上、最初のページ表示ではdata-title属性の値は反映されないので(ほかのページから遷移されるときには反映される)、先頭ページと<title>要素の値は一致させておくのが望ましいだろう。

ページ内リンクを設置する

 もっとも、実際にアクセスしてみれば分かるように、この時点ではデフォルトで先頭ページ(=最初の<div>要素)が表示されるだけで、あまり意味がない(2ページ目以降は無視される)。

デフォルトでは先頭ページが表示される

 そこで、それぞれのページ間を移動できるように、リンクを設置してみよう。以下のとおりだ(追加部分は太字)。

<div id="basic" data-role="page" data-title="jQuery Mobile入門">
  <div data-role="header">
    <h1>jQuery Mobile入門</h1>
  </div>
  <div data-role="content">
    <p>こんにちは、jQuery Mobile!</p>
    <p>
      [<a href="#ui-elm">jQuery MobileのUI要素</a>]<br />
      [<a href="#app">応用アプリケーション</a>]
    </p>
  </div>
  <div data-role="footer">
    Copyright 1998-2012, WINGS Project
  </div>
</div>

<div id="ui-elm" data-role="page" data-title="jQuery MobileのUI要素">
  <div data-role="header">
    <h1>jQuery MobileのUI要素</h1>
  </div>
  <div data-role="content">
    <p>jQuery Mobileにはリストビューやボタンなどの部品があります。</p>
    <p>
      [<a href="#basic">jQuery Mobile入門</a>]<br />
      [<a href="#app">応用アプリケーション</a>]
    </p>
  </div>
  <div data-role="footer">
    Copyright 1998-2012, WINGS Project
  </div>
</div>

<div id="app" data-role="page" data-title="応用アプリケーション">
  <div data-role="header">
    <h1>応用アプリケーション</h1>
  </div>
  <div data-role="content">
    <p>応用アプリとしてTwitter連携アプリを作成してみましょう。</p>
    <p>
      [<a href="#basic">jQuery Mobile入門</a>]<br />
      [<a href="#ui-elm">jQuery MobileのUI要素</a>]
    </p>
  </div>
  <div data-role="footer">
    Copyright 1998-2012, WINGS Project
  </div>
</div>
ページ間を移動できるようにリンクを設置した場合のコード例(<body>要素内を抜粋)

 ページ間のリンクは、従来のページ内リンク(=「#id値」で表すリンク)で表現できる。再度アクセスしてみると、今度はページにリンクが表示され、リンクをタップすると、ページがスライド式に切り替わることが確認できる。

[jQuery MobileのUI要素]リンクをタップ
リンクをタップすると、ページが切り替わる

外部ページへのリンクを設置する

 jQuery Mobileでは、外部ページへのリンクも(もちろん)利用できる。例えば、以下は外部ページとしてbasic2.htmlを用意し、basic.htmlからリンクする場合のコード例だ。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>

<div id="ext" data-role="page">
  <div data-role="header">
    <h1>その他の知識</h1>
  </div>
  <div data-role="content">
    <p>その他諸々です!</p>
  </div>
  <div data-role="footer">
    Copyright 1998-2012, WINGS Project
  </div>
</div>

</body>
</html>
basic.htmlからリンクされることを想定した外部ページ(basic2.html)

<div id="basic" data-role="page">
  <div data-role="header">
    <h1>jQuery Mobile入門</h1>
  </div>
  <div data-role="content">
    <p>こんにちは、jQuery Mobile!</p>
    <p>
      [<a href="#ui-elm">jQuery MobileのUI要素</a>]<br />
      [<a href="#app">応用アプリケーション</a>]<br />
      [<a href="basic2.html">外部ページ</a>]
    </p>
  </div>
  <div data-role="footer">
    Copyright 1998-2012, WINGS Project
  </div>
</div>
……省略……
外部ページbasic2.htmlへのリンクを追加したbasic.html(<body>要素内を抜粋)

 実行し、[外部ページ]リンクをタップすると、[Loading]メッセージが表示された後、外部ページ(basic2.html)が内部ページと同じように表示されるはずだ。

[外部ページ]リンクをタップすると[Loading]メッセージが表示される
[Loading]アイコンを表示した後、外部ページを表示

 もっとも、外部ページbasic2.htmlには、jQuery Mobileのライブラリもスタイルシートもインポートされていないのに、この挙動は不思議に思われるかもしれない。結果には、リンク元のページと同じようにスマートフォン的なスタイルが適用されているのだ。

 だが、種を明かしてみればカンタンなことだ。jQuery Mobileでは、内部的には外部ページを非同期通信によって取得している。もっと正確にいうと、非同期通信によって取得したページから「data-role属性="page"である最初の要素」を抜き出し、現在の文書ツリーに組み込んでいるのだ。これによって、あたかも外部ページを内部ページと同様に扱うことができる。

jQuery Mobileによる外部ページへの遷移方法

 ただし、その仕組みが故に、jQuery Mobileで外部ページを扱う際には、以下の制約もあるので注意されたい。

  • 外部ページには複数の「ページ」、あるいは「ページ」以外のコンテンツを含むことはできない(含んでいても無視される)
  • リンク元のページと外部ページとでid値は一意でなければならない。

 また、外部ページを文書ツリーに組み込みたくないというケースもあるだろう。そのような場合には、アンカー・タグ(=<a>タグ)に対して以下いずれかの属性を付与することで、デフォルトの挙動を無効にし、一般的なリンクとしての挙動を採らせることもできる。

  • rel属性に「external」を指定
  • target属性に「_blank」などを指定
  • data-ajax属性に「false」を指定

 rel属性とdata-ajax属性とは見た目の挙動は同じであるが、マークアップとしての意味合いは異なる。まず、rel属性は「external(外部)」という値の意味のとおり、リンク先が「サイト外」である場合に指定すべきだ。一方、data-ajax属性は「サイト内」でも非同期通信は行いたくないというケースで利用することになるだろう。

 また、リンク先が異なるドメインである場合、jQuery Mobileは明らかに別サイトであると認識し、非同期通信は無条件で無効化される*4

*4 そのほか、グローバル設定でアプリケーション全体の非同期通信を無効化することもできる。これについては、本連載の後半で解説の予定だ。

 以上、今回はjQuery Mobileアプリケーションの最も基本的な構造を学んだ。冒頭述べたように、jQuery Mobileは、いわゆるjQueryのMobile版ではなく、jQueryを利用したUI作成のための――むしろjQuery UIのMobile版に近いライブラリである。決められたマークアップに従うだけで、いかにも「スマートフォン的な」ページを開発できることが理解いただけたと思う。

 次回は、jQuery Mobileページにアニメーション効果や、ダイアログ/リストビューなどのUI部品を取り込む方法について解説する予定だ。どうぞお楽しみに。 End of Article


 INDEX
  [連載]jQuery Mobile入門
  jQuery Mobileページの基本構造を理解しよう
    1.jQuery Mobileとは?/HTML5ページの基本マークアップ
    2.jQuery Mobileページの基本マークアップ
  3.jQueryアプリケーションを複数ページに対応する

インデックス・ページヘ  「連載:jQuery Mobile入門」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

注目のテーマ

業務アプリInsider 記事ランキング

本日 月間
ソリューションFLASH