SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

JavaScriptとDOMによる動的なWebページの作成

ページの要素の作成、変更、削除を動的に実行

  • X ポスト
  • このエントリーをはてなブックマークに追加

図10.1(a) Firefoxで表示したXHTMLドキュメント(1/3)
図10.1(a) Firefoxで表示したXHTMLドキュメント(1/3)
図10.1(b) FirefoxのDOM Inspectorでは、左側のペインにドキュメントツリーが表示される。右側のペインには、左側で選択したノードについての情報が表示される(2/3)
図10.1(b) FirefoxのDOM Inspectorでは、左側のペインにドキュメントツリーが表示される。右側のペインには、左側で選択したノードについての情報が表示される(2/3)
図10.1(c) Internet ExplorerのDeveloper Toolbarで表示される情報はFirefoxのDOM Inspectorとおおむね同様で、ブラウザウィンドウ下部のパネルに表示される(3/3)
図10.1(c) Internet ExplorerのDeveloper Toolbarで表示される情報はFirefoxのDOM Inspectorとおおむね同様で、ブラウザウィンドウ下部のパネルに表示される(3/3)

 また、この例を見ると、ページ本体、段落、リストの内容を表す#textノード以外にも、いくつかの#textノードが含まれていますが、それらの中身は単なる空白です。Firefoxの場合、XHTMLドキュメントをDOMツリーとして解析するときに、兄弟要素間の空白をテキストとして解釈し、DOMツリー上で#textノードとして配置してしまうのです。Internet Explorerの場合は、こうした空白は無視され、空の#textノードにはなりません。また、読者の皆さんがサンプルファイルをダウンロードしてこの例を実際に試してみると、BODYノードの子に#commentノードがあると思いますが、上の実行例のDOMツリーでは、FirefoxでもInternet Explorerでもそのノードはありません。これは、ダウンロードしたサンプルファイルでは末尾に著作権表記の行が入っているためです。

 このセクションでは、DOMノードとDOMツリーの概念について説明しました。次のセクションでは、DOMノードについてもう少し掘り下げていき、DOMノードのメソッドとプロパティを使って、JavaScriptでドキュメントのDOMツリーを変更する方法について見ていきます。

DOMツリーの操作と変更

 DOMを使ってドキュメントの要素を操作すると、イベントドリブンのJavaScriptでページの中身を動的に変更できます。このセクションでは、各DOMノードが持つプロパティとメソッドについて見ていきます。こうしたプロパティとメソッドを使うことで、DOMツリーの操作、ノードの変更、要素の動的な作成と削除などを実行できます。

 図10.2は、DOMノードの機能とdocumentオブジェクトのメソッドを利用したプログラムの例です。getElementById以外にも2つのメソッドを新たに使用しており、要素の強調表示、変更、挿入、削除を行うことができます。

 117~132行目が、XHTMLの基本的な要素を使ってページの中身を記述した部分です。各要素にはid属性を指定し、要素の中身としてもidを角かっこで囲んで記述しています。例えば、117~118行目のh1要素は、id"bigheading"とし、見出しのテキストも先頭を[bigheading]としています。こうすることで、各要素のidをページ上でも把握できるようにしています。body要素内にはこのほか、h3の見出し、いくつかのp要素、順序なしのリストがあります。

 body要素の残りの部分は、133~162行目のdiv要素に入っています。134行目がform要素の開始タグです。必須のaction属性には空文字列を指定し(サーバへの送信は行わない)、onsubmit属性ではfalseを返すよう指定しています。フォームのonsubmitハンドラがfalseを返すと、action属性で指定したアドレスへの移動は中止されます。こうすることで、変更前のXHTMLを再読み込みすることなく、JavaScriptのイベントハンドラでページを変更できるようにしています。

図10.2 DOMの基本機能の使用例
図10.2 DOMの基本機能の使用例
図10.2(a)最初の読み込み時のページ。大見出しを強調表示している(1/8)
図10.2(a)最初の読み込み時のページ。大見出しを強調表示している(1/8)
図10.2(b) [Get By id]ボタンでpara3を選択した状態(2/8)
図10.2(b) [Get By id]ボタンでpara3を選択した状態(2/8)
図10.2(c)選択した段落の前に新しい段落を挿入した状態(3/8)
図10.2(c)選択した段落の前に新しい段落を挿入した状態(3/8)
図10.2(d)[Append Child]ボタンを使って子の段落を作成した状態(4/8)
図10.2(d)[Append Child]ボタンを使って子の段落を作成した状態(4/8)
図10.2(e)選択した段落を新しい段落に置き換えた状態(5/8)
図10.2(e)選択した段落を新しい段落に置き換えた状態(5/8)
図10.2(f)選択中のノードの親を[Get Parent]ボタンで取得(6/8)
図10.2(f)選択中のノードの親を[Get Parent]ボタンで取得(6/8)
図10.2(g)リストの最初の項目を選択(7/8)
図10.2(g)リストの最初の項目を選択(7/8)
図10.2(h)[Remove Current]ボタンで選択中のノードを削除してその親を選択(8/8)
図10.2(h)[Remove Current]ボタンで選択中のノードを削除してその親を選択(8/8)

 ページ上の要素の変更や操作を行うためのコントロールは、135~160行目のテーブルに収められています。6つのボタンはそれぞれ別個のイベント処理関数を呼び出し、ボタンの種類に応じた処理を実行します。

 JavaScriptのコードの冒頭では2つの変数を宣言しています。1つ目のcurrentNode変数(27行目)は、現在選択中のノードを覚えておくための変数です。各ボタンの機能はこのノードに対して実行することになります。この変数は、body要素のonload属性(116行目)で、"bigheading"というidh1要素に初期化しています。2つ目のidcount変数(28行目)は、新規作成した要素に一意のidを割り当てるための変数です。それ以降のJavaScriptコードは、XHTMLのボタンに対応するイベント処理関数と、それらから呼び出す2つのヘルパー関数です。ここからは、各ボタンの機能と、対応するイベントハンドラについて詳しく見ていくことにしましょう。

次のページ
各ボタンの機能と、対応するイベントハンドラ

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Paul J. Deitel(Paul J. Deitel)

 Deitel & Associates, Inc.のCTO(最高技術責任者)。Sun Microsystems、EMC2、IBMなど、業界の顧客企業向けに、インターネットやWorld Wide Webに関するコースやプログラミング言語についての講座を実施してきた。Massachusetts...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Harvey M. Deitel(Harvey M. Deitel)

 Deitel & Associates, Inc.のCEO(最高経営責任者)。コンピュータ分野で40年のキャリアを誇り、業界内や学術分野で豊富な経験を持つ。Massachusetts Institute of Technologyで理学士号および理学修士号、Boston Universit...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3943 2009/06/11 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング