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

3619
0
01-16-2017 06:12 PM

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

 

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 をサポートするモジュールをご説明したいと思います。

 

関連リンク

Tags (2)
Version history
Last update:
‎11-12-2020 10:10 PM
Updated by: