DOMツリーの処理を行う際に便利なメソッドが集められたオブジェクト。
このオブジェクトは常にスタティックメソッドを直接呼ぶことにより使用します。コンストラクタを持たないため、インスタンスを作成することはできません(し、その必要もありません)。
append(a, b)
bの最後の子ノードの後にaを追加します。
実行後、aはbの最後の子ノード、bはaの親要素となります。
aが文字列である場合にはaをテキストノードにしてから追加します。
insert(a, b)
bの前にaを追加します。
実行後、aはbの兄要素、bはaの弟要素となります。
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ノードである場合、次のルールが適用されます。
input
要素に対しては、明示的に指定されていなくても常にtype
属性とvalue
属性が取り出されます。Jamritas.Event.add
()などによって要素に追加されたイベントハンドラを取り出すことはできません。
dom2obj(dom[, config])
変換規則に従い、DOMツリーを組み込みオブジェクトへ変換します。
domがHTML DOMである場合には、要素名、属性名は小文字に統一されます。
Jamritas.DOM.dom2obj.addKeyProperty
をtrue
とすることで、要素ノード、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ノードとコメントノードはそれぞれ以下のような組み込みオブジェクトに 対応します。
DOMツリー:
<![CDATA[foo]]> <!--bar-->
組み込みオブジェクト:
{"#cdata-section": "foo"} {"#comment": "bar"}
処理命令ノードは以下のような組み込みオブジェクトに対応します。
DOMツリー:
<?target data?>
組み込みオブジェクト:
{"?target": "data"}