Dojo:きほんのき③ ~DOM(前編)~

Document created by ayako_suzukiesrij-esridist Employee on Jan 16, 2017Last modified by masanobu_hiranoesrij-esridist on Jan 16, 2017
Version 4Show Document
  • View in full screen mode

 

ArcGIS API for JavaScriptDojo Toolkit と呼ばれるオープンソースのライブラリをベースに開発されています。
本連載では、はじめて Dojo を使う方を対象に、Dojo の基本をご紹介しています。

 

前回は Dojo が導入するモジュール システムについてご説明しました。
今回は、DOM(Document Object Model)を Dojo から利用する方法について、DOM ノードの取得や作成などの基本的な操作の流れとともにご紹介します。

 

DOM ノードを取得してみよう

 

普段、どのような方法で DOM を利用していますか?
一般的な方法としては、document オブジェクトを使うことではないでしょうか。
あるいは jQuery を使っている方は $("#hoge") このような形がすぐに頭に思い浮かぶかもしれません。

 

Dojo の世界で DOM ノードを取得するためにもっとも簡単でよく使われる方法は "dojo/dom" モジュールの byId メソッドを使うことです。

 

dom.byId(id);

  • id:取得したい DOM ノードの ID。渡した ID を持つ DOM ノードを返します。DOM ノードが見つからない場合は null を返します。

 

次のサンプルは、Web マップを参照し、地図に表示するアプリです。
Web マップにはさまざまな情報が含まれています。今回はWeb マップのタイトルを、dom.byId() を使い取得した DOM ノードに表示しています。

 

※ 画像をクリックするとソースコードを表示します。

 

DOM ノードを作ってみよう

 

DOM を利用する上で、DOM ノードの取得とともによく使われるのは DOM ノードの作成ではないでしょうか?
document オブジェクトでは createElement メソッドが使用されますね。

 

Dojo で新しく DOM ノードを作成するには、"dojo/dom-construct" モジュールの create メソッドを使用します。
domConstruct.create() は DOM ノードの作成や配置などの一連の操作をシンプルにコーディングできるようデザインされています。

 

domConstruct.create(tag, attrs, refNode, pos);

  • tag:作成したい要素の文字列(例:"div"、"a"、"p"、"li"、"script"、"br")
  • attrs(オプション):要素の属性のオブジェクト(例:{innerHTML: "こんにちは", color: "red"}、{href: "help.html", title: "ヘルプ", innerHTML: "ヘルプ"})
  • refNode(オプション):作成した要素を配置する DOM ノードまたは DOM ノードの ID
  • pos(オプション):refNode 内の相対位置。有効な値は以下の通り(デフォルトの値は"last")
    • "after":refNode の親要素の子要素として refNode の直後に配置する
    • "before":refNode の親要素の子要素として refNode の直前に配置する
    • "first":refNode の最初の子要素として配置する
    • "last":refNode の最後の子要素として配置する
    • "only":refNode のすべての子要素と置換する
    • "replace":refNode と置換する
    • 数値:refNode の n 番目の子要素として置換する

 

では、先ほどと同じように Web マップを読み込み、タイトルを表示してみましょう。
先ほどは、infoPanel という ID を持つ DOM ノードを取得し、infoPanel 直下にタイトルを表示していました。
今回は新しく p 要素を作成し、infoPanel の最初の子要素として配置して、その中にタイトルを表示します。

 

 

"dojo/dom-construct" には、DOM ノードを作成するメソッドがもうひとつ用意されています。

HTML 文字列から DOM ノードを作成する、domConstruct.toDom() です。

 

domConstruct.toDom(frag, doc);

  • frag:DOM ノードへ変換する HTML 文字列
  • doc(オプション):DocumentFragment。デフォルトは dojo/_base/window::doc(現在の document オブジェクト)。

 

domConstruct.toDom() は domConstruct.create() と違い、作成した DOM ノードをドキュメント内に配置するための引数が用意されていません。

作成した DOM ノードを配置するには、次のセクションで紹介する domConstruct.place() を使います。

 

DOM ノードを配置してみよう

 

すでにある DOM ノードをドキュメントに配置するときに使用するのが、domConstruct.place() です。

 

domConstruct.place(node, refNode, pos);

  • node:配置したい DOM ノードまたは DOM ノードの ID
  • refNode:配置先の DOM ノードまたは DOM ノードの ID
  • pos(オプション):refNode 内の相対位置

 

次のサンプルは新たに作成した DOM ノードに Web マップの概要を表示しています。

DOM ノードの作成には、domConstruct.toDom() を使い HTML 文字列から新しい DOM ノードを作成しています。

そして、作成した DOM ノードを domConstruct.place() を使い配置します。

 

 

 

DOM ノードを削除してみよう

 

Dojo は DOM ノードを削除する2つのメソッドを dojo/dom-construct モジュールに用意しています。

domConstruct.destroy() は対象となる DOM ノード自体を削除し、domConstruct.empty() は対象となる DOM ノードに含まれる子要素を削除します。

 

domConstruct.destroy(node);

  • node:削除したい DOM ノードまたは ID。渡した DOM ノードと DOM ノードに含まれるすべての子要素を削除します

 

domConstruct.empty(node);

  • node:削除したい DOM ノードまたは ID。渡した DOM ノードに含まれるすべての子要素を削除します

 

次のサンプルは infoPanel 要素をクリックすると、infoPanel 要素と infoPanel 要素に含まれるすべての子要素を削除します。

※ "dojo/on" はイベントハンドラのモジュールです。詳細は次々回にご説明する予定ですが、ここでは infoPanel 要素をクリックすると第 3 引数に渡されたコールバック関数を実行します。

 

 

Dojo のモジュールを使った DOM ノードの取得、作成、配置、削除と DOM を利用する基本的な操作方法をご説明しました。

もちろん、これらの操作は document オブジェクトが用意する各メソッドを使うことで実現可能です。

しかし、Dojo のモジュールを利用することで、シンプルな記述で DOM を簡単に利用できるほか、ブラウザーごとに異なる挙動を吸収することができます。

 

次回はここでは紹介しきれなかった Dojo が提供する DOM をサポートするモジュールをご説明したいと思います。

 

関連リンク

Attachments

    Outcomes