DOM

DOMツリーの処理を行う際に便利なメソッドが集められたオブジェクト。

Jamritas.DOM

このオブジェクトは常にスタティックメソッドを直接呼ぶことにより使用します。コンストラクタを持たないため、インスタンスを作成することはできません(し、その必要もありません)。

スタティックメソッド

append(a, b)

bの最後の子ノードの後にaを追加します。

実行後、abの最後の子ノード、baの親要素となります。

aが文字列である場合にはaをテキストノードにしてから追加します。

insert(a, b)

bの前にaを追加します。

実行後、abの兄要素、baの弟要素となります。

aが文字列である場合にはaをテキストノードにしてから追加します。

replace(a, b)

bの位置にaを追加します。

実行後、bは親要素を持たなくなります。

aが文字列である場合にはaをテキストノードにしてから追加します。

remove(a)

aをツリーから削除します。

実行後、aは親要素を持たなくなります。

create(name, data[, document])

DOMノードを作成します。引数の種類によって作成されるノードが異なります。

dataがオブジェクトであればnameを要素名、dataを属 性セットとして要素ノードが作成されます。

nameが文字列"#cdata-section"であればdataを内容と するCDataSectionノードが作成されます。

nameが文字列"#comment"であればdataを内容とするコ メントノードが作成されます。

nameの1文字目が'?'であればnameの2文字目以降と dataとから処理命令ノードが作成されます。

第三引数にはノード作成のためのDocumentノードを渡すことができ ます。省略された場合には、Jamritas.DOM.create.documentが使用 されます。デフォルト値はグローバル変数documentです。

attrs(elem)

要素から属性セットを取り出します。

elemがHTMLDOMノードである場合、次のルールが適用されます。

Jamritas.Event.add()などによって要素に追加されたイベントハンドラを取り出すことはできません。

dom2obj(dom[, config])

変換規則に従い、DOMツリーを組み込みオブジェクトへ変換します。

domがHTML DOMである場合には、要素名、属性名は小文字に統一されます。

Jamritas.DOM.dom2obj.addKeyPropertytrueとすることで、要素ノード、CDataSectionノード、コメントノード、処理命令ノードに対応するオブジェクトに$keyというプロパティが設定されます。プロパティ値はそれぞれ、要素名、"#cdata-section""#comment"'?' + 処理命令名になります。

configを使用することにより、作成される各オブジェクトに$keyプロパティを追加させることを明示的に行うことができます。

// $keyプロパティが追加されたオブジェクトを作成
var dom = Jamritas.DOM.obj2dom(obj, {addKeyProperty: true});
obj2dom(obj[, config])

変換規則に従い、組み込みオブジェクトをDOMツリーへ変換します。

DOMツリーの作成にはJamritas.DOM.obj2dom.documentが用いられます。デフォルト値はグローバル変数documentです。

configを使用することにより、一度だけ特定のオブジェクトからDOMツリーを生成させることができます。

// 変数xmldocからDOMツリーを作成する
var dom = Jamritas.DOM.obj2dom(obj, {document: xmldoc});
dom2text(dom)

変換規則に従い、DOMツリーを文字列へ変換します。

domがHTML DOMである場合には、要素名、属性名は小文字に統一されます。

obj2text(obj)

変換規則に従い、組み込みオブジェクトを文字列へ変換します。

通常これはdom2text(obj2dom(obj))と同じ結果となりますが、DOMツリーを構築することなく直接変換を行うためobj2text(obj)の方が高速に動作します。

text2dom(text)

XML文字列からXML DOMツリーを作成します。

戻り値はtextから作成されるDOMツリーのルート要素です。文書ノー ドが必要な場合は戻り値のownerDocumentプロパティから取得できます。

作成されるのはXML DOMツリーです。HTML DOMツリーは作成できません。

XML DOMツリーの作成に失敗した場合には例外が投げられます。

変換規則

テキストのみを含む要素

子ノードとしてテキストのみを含む要素は以下のような組み込みオブジェクトに対応します。

DOMツリー:

<p>hello, world.</p>

組み込みオブジェクト:

{p: "hello, world."}

子要素をひとつだけ持つ要素

子ノードとして要素をひとつだけ含む要素は以下のような組み込みオブジェクトに対応します。

DOMツリー:

<p><strong>hello, world!</strong></p>

組み込みオブジェクト:

{p: {string: "hello, world!"}}

子を持たない要素

子ノードを含まない要素は以下のような組み込みオブジェクトに対応します。

DOMツリー:

<br />

組み込みオブジェクト:

{br: null}

子ノードを複数持つ要素

子ノードとして要素やテキストを複数含む要素は以下のような組み込みオブジェクトに対応します。

DOMツリー:

<p><em>Perl</em>, <em>Ruby</em>, and <strong>JavaScript</strong> are script languages.</p>

組み込みオブジェクト:

{p: [{em: "Perl"},
     ", ",
     {em: "Ruby"},
     ", and ",
     {strong: "JavaScript"},
     " are script languages."]}

特定の子要素を取り出す場合、dom2obj()によって作成された組み込みオブジェクトであれば、配列のインデクスによる指定だけでなく要素名による指定も行うことができます。例えば上記の例でstrong要素の内容を取り出すために、

var text = obj.p[4].strong; // text == "JavaScript"

とするべきところを、

var text = obj.p.strong; // text == "JavaScript"

とすることができます。同じ名前の要素が複数ある場合には、インデクスを与 えることで同様に取り出せます。

var text = obj.p.em[1] // text == "Ruby"

属性を持つ要素

属性を持つ要素は以下のような組み込みオブジェクトに対応します。

DOMツリー:

<p><strong id="main" title="greeting">hello, world</strong></p>

組み込みオブジェクト:

{p: {strong: "hello, world", "@id": "main", "@title": "greeting"}}

属性値の取得には直観とのずれが生じるので注意が必要です。

var title = obj.p["@title"]; // p要素の属性ではない

CDATASectionノード、コメントノード

CDATASectionノードとコメントノードはそれぞれ以下のような組み込みオブジェクトに 対応します。

DOMツリー:

<![CDATA[foo]]>

<!--bar-->

組み込みオブジェクト:

{"#cdata-section": "foo"}

{"#comment": "bar"}

処理命令ノード

処理命令ノードは以下のような組み込みオブジェクトに対応します。

DOMツリー:

<?target data?>

組み込みオブジェクト:

{"?target": "data"}

SourceForge.net Logo