DOMHTMLImplementation.createHTMLDocument(title)DOMImplementation.createDocument(namespaceURI, qualifiedName, doctype)DOMImplementationLS.createLSParser(mode, schemaType)DOMParser()ActiveXObject("htmlfile")[object HTMLDocument], [object Document] を生成するメソッドのまとめです。
JavaScriptコードの説明はしてませんが、document.implementation.createHTMLDocument.js をみれば、多分きっとおそらくわか……ごめんなさい、石投げないで!
function XMLAnalysis は XML1.0 に80%ぐらい準拠してます。残りの20%はあまりにも長い文字クラスで使われそうにない文字を削った分です。関数をグループ化しただけでオブジェクトっぽくないところは気が向いたら直します。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xml:lang="ja" xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>sample1</title>
<style type="text/css"><![CDATA[
body { margin: 0; padding: 1em; }
]]></style>
</head>
<body><p>Hello, World!</p></body>
</html>
| ブラウザ | document.implementation |
createHTMLDocument() |
createDocument() |
createLSParser() |
DOMParser() |
ActiveXObject("htmlfile") |
|---|---|---|---|---|---|---|
| Google Chrome 5 | 対応 | 対応 | 対応 | 非対応 | 対応 | 非対応 |
| Opera v10.60 | 対応 | 対応 | 対応 | 対応 | 対応 | 非対応 |
| Firefox v3.6.6 | 対応 | 非対応 | 対応 | 非対応 | 対応 | 非対応 |
| IE8 | 対応 | 非対応 | 非対応 | 非対応 | 非対応 | 対応 |
DOMHTMLImplementation.createHTMLDocument(title)[object HTMLDocument] (HTML文書のオブジェクト) を生成する。document 直下に html要素 が生成される。HTMLElement.tagName, Node.nodeName の戻り値は大文字になる。HTMLBodyElement.tagName === "BODY"[object Document] との違いは HTMLElement.tagName.toLowerCase() で吸収できる。| 引数 | 真の値 を指定する | 偽の値 を指定する |
|---|---|---|
| 第一引数 (title) |
|
|
DOMImplementation.createDocument(namespaceURI, qualifiedName, doctype)[object Document] (XML文書のオブジェクト) を生成する。(Opera v10.60, Firefox v3.6.6 は [object XMLDocument] を生成するが、[object Document] がDOM標準実装。)HTMLElement.tagName, Node.nodeName の戻り値は小文字になる。HTMLBodyElement.tagName === "body"[object HTMLDocument] との違いは HTMLElement.tagName.toLowerCase() で吸収できる。| 引数 | 真の値 を指定する | 偽の値 を指定する |
|---|---|---|
| 第一引数 (namespaceURI) |
|
|
| 第二引数 (qualifiedName) |
|
|
| 第三引数 (doctype) |
|
|
DOMImplementationLS.createLSParser(mode, schemaType)[object Document] (XML文書のオブジェクト) を生成する…と思われる。(ただし、Operaは [object XMLDocument] を返すかも。)DOMParser()[object XMLDocument] (XML文書のオブジェクト) を生成し、Google Chrome 5 は [object Document] を生成する。DOMParser() は [object DOMParser] を返す。DOMParser.parseFromString(xmlString, mimetype) は [object XMLDocument] を返す。(※Google Chrome5 は [object Document] を返す)DOMParser.parseFromString(xmlString, mimetype) は、xmlString にDOCTYPE宣言を含む時、document.doctype を [object DocumentType] で初期化する。DOMParser.parseFromString(xmlString, mimetype) は、ルート要素に xmlns="http://www.w3.org/1999/xhtml" を含む xmlString を渡すと、body要素ノードは [object HTMLBodyElement] となる。名前空間を指定しなかった場合、body要素ノードは [object Element] となる。(※ただし、Opera v10.60 は「名前空間」「XHTMLのDOCTYPE宣言」のいずれかを含めば、[object HTMLBodyElement] となる。)"http://www.w3.org/1999/xhtml" の名前空間を持つ [object XMLDocument], [object Document] において、document.createElement("div") すると、Firefox v3.6.6, Google Chrome 5 は [object Element] を返し、Opera v10.60 は [object HTMLDivElement] を返す。[object XMLDocument], [object Document] において、document.createElementNS('http://www.w3.org/1999/xhtml', 'div') すると、Firefox v3.6.6 は [object HTMLDivElement] を返し、Google Chrome 5, Opera v10.60 は [object Element] を返す。(※ちなみに、IE8 は document.createElementNS() に対応しない。)ActiveXObject("htmlfile")[object HTMLDocument] (HTML文書のオブジェクト) を生成する。document.open(), document.write(), document.close() でHTMLタグを書き出して各ノードを生成する。document.write() で <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> を書き出しても、document.doctype は null を返す。HTMLElement.tagName, Node.nodeName の戻り値は大文字になる。createDocument() で [object XMLDocument] を返す。createDocument() の第三引数に [object DocumentType] を指定すると、range.createContextualFragment() 実行時にエラー「uncaught exception」が発生する(原因不明)。第三引数に null を指定すればエラーは発生しない。createDocument() の第一引数に "http://www.w3.org/1999/xhtml" 指定すると、document.documentElement は [object HTMLHtmlElement] を返すが、document.getElementsByTagName('body').item(0) は [object Element] を返す。従って、document.getElementsByTagName('body').item(0).innerHTML は使えない。createDocument() の第一引数 (名前空間) に null を指定して生成した [object Document] において、range.createContextualFragment() を実行すると「Uncaught Error: NOT_SUPPORTED_ERR: DOM Exception 9」が発生する(原因不明)。createDocument() で第一引数を指定すれば、エラーは発生しない。LSParser.parse() で「NOT_SUPPORTED_ERR」を返す。createDocument() で生成した [object Document] において、range.createContextualFragment() を実行するとクラッシュして再起動を要求される。(原因不明)LSParser の使い方は自信を持って自信がないと言い切れます。(えへん)
[object XMLDocument] って何なんだ…。
[object XMLDocument] って何なんだ…。
DOMParser() は Firefox の独自拡張だけど、癖がなくて使いやすい。反面、DOM L3標準のcreateDocument() はブラウザの実装が追いついていない感じ。Firefox, Opera の挙動が特におかしい。
DOMImplementation.createDocument() )