[1] [[要素]]の作成は、いくつかの方法があり、
それぞれで作れる[[要素]]の範囲が少しずつ違っています。
また、[[HTML文書]]と[[XML文書]]とでも、動作が異なります。

* 仕様書

[REFS[
- [23] '''[CITE@en[DOM Standard]] ([TIME[2016-04-26 17:13:41 +09:00]] 版) <https://dom.spec.whatwg.org/#concept-create-element>'''
- [92] [CITE@en[DOM Standard]] ([TIME[2016-04-26 17:13:41 +09:00]] 版) <https://dom.spec.whatwg.org/#dom-document-createelement>
- [117] [CITE@en[DOM Standard]] ([TIME[2016-04-26 17:13:41 +09:00]] 版) <https://dom.spec.whatwg.org/#dom-document-createelementns>
- [134] [CITE@en[DOM Standard]] ([TIME[2016-04-26 17:13:41 +09:00]] 版) <https://dom.spec.whatwg.org/#dictdef-elementcreationoptions>
- [7] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2014-07-20 22:41:10 +09:00]] 版) <http://www.whatwg.org/specs/web-apps/current-work/#create-an-element-for-the-token>
- [2] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2014-07-02 23:06:24 +09:00]] 版) <http://www.whatwg.org/specs/web-apps/current-work/#blocked-on-parser>
- [139] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2016-05-14 09:55:50 +09:00]]) <https://html.spec.whatwg.org/#xml-parser>
]REFS]

* 要素の作成

[63] [DFN[[RUBYB[要素の作成]@en[create an element]]]]は、
[VAR[文書]]、[VAR[局所名]]、[VAR[名前空間]]、[VAR[接頭辞]] (既定値 [[null]])、
[VAR[is]] (既定値 [[null]])、[VAR[同期カスタム要素フラグ]]について、
次のようにします [SRC[>>23]]。
[FIG(steps)[
= [64] [VAR[定義]]を、[VAR[文書]]、[VAR[名前空間]]、[VAR[局所名]]、[VAR[is]]
について[[カスタム要素定義を探す]]を実行した結果に設定します。
= [65] [VAR[定義]]が [[null]] でなく、
[VAR[定義]]の[F[名前][カスタム要素定義名]]が[VAR[定義]]の[F[局所名]]と異なるなら、
== [66] [VAR[結果]]を、[[要素]]に設定します。
[FIG(list members middle)[
[FIGCAPTION[
[[要素]]
]FIGCAPTION]
: [F[インターフェイス]] : [VAR[局所名]]と[[HTML名前空間]]の[[要素インターフェイス]]
: [F[属性リスト]] : 空
: [F[名前空間]] : [[HTML名前空間]]
: [F[名前空間接頭辞]] : [VAR[接頭辞]]
: [F[局所名]] : [VAR[局所名]]
: [F[[[[CODE[is]]値]]]] : [VAR[is]]
: [F[カスタム要素状態]] : [CODE[undefined]]
: [F[カスタム要素定義]] : [CODE[null]]
: [F[節点文書]] : [VAR[文書]]
]FIG]
== [67] [VAR[同期カスタム要素フラグ]]が設定されていれば、
=== [68] [VAR[要素]]と[VAR[定義]]について[[要素の格上げ]]を実行します。
== [30] それ以外なら、
=== [31] [VAR[結果]]と[VAR[定義]]について [[enqueue a custom element upgrade reaction]]
します。
== [32] [VAR[結果]]を返します。
= [43] それ以外で、[VAR[定義]]が [CODE[null]] 以外なら、
== [33] [VAR[同期カスタム要素フラグ]]が設定されているなら、
=== [69] [VAR[C]] を、[VAR[定義]]の[F[構築器][カスタム要素構築器]]に設定します。
=== [156] [VAR[例外]]を、 [CODE[null]] に設定します。
=== [45] [VAR[結果]]を、[VAR[C]] に[[構築]]を適用した結果に設定します。
[[例外]]が[[投げ]]られたら、[VAR[例外]]をこれに設定します。
=== [46] [VAR[例外]]が [CODE[null]] で、
[VAR[結果]]が [CODE(DOMi)@en[HTMLElement]] を[[実装]]していなければ、
==== [47] [VAR[例外]]を、 [CODE(DOMe)@en[TypeError]] に設定します。
=== [48] [VAR[例外]]が [CODE[null]] で、かつ、
[FIG(list)[
- [49] [VAR[結果]]の[F[属性リスト]]が空ではない
- [50] [VAR[結果]]の[F[子供][childNodes]]が空ではない
- [51] [VAR[結果]]の[F[親][parentNode]]が [CODE[null]] ではない
- [52] [VAR[結果]]の[F[節点文書]]が[VAR[文書]]ではない
- [53] [VAR[結果]]の[F[名前空間]]が[[HTML名前空間]]でない
- [55] [VAR[結果]]の[F[局所名]]が[VAR[局所名]]でない
]FIG]
... のいずれかを満たすなら、
==== [56] [VAR[例外]]を、 [CODE(DOMe)@en[NotSupportedError]] に設定します。
=== [157] [VAR[例外]]が [CODE[null]] なら、
==== [57] [VAR[結果]]の[F[名前空間接頭辞]]を、[VAR[接頭辞]]に設定します。
==== [165] [VAR[結果]]の[F[[[[CODE[is]]値]]]]を、[CODE[null]] に設定します。
=== [169] それ以外なら、
==== [170] [VAR[例外]]について[[例外を報告]]します。
==== [171] [VAR[結果]]を、[[要素]]に設定します。
[FIG(list members middle)[ [172] [[要素]]
: [F[インターフェイス][要素インターフェイス]] : [CODE(DOMi)@en[HTMLUnknownElement]]
: [F[属性リスト]] : [[空リスト]]
: [F[名前空間][名前空間名]] : [[HTML名前空間]]
: [F[名前空間接頭辞]] : [VAR[接頭辞]]
: [F[局所名]] : [VAR[局所名]]
: [F[カスタム要素状態]] : [CODE[failed]]
: [F[カスタム要素定義]] : [CODE[null]]
: [F[[[[CODE[is]]値]]]] : [CODE[null]]
: [F[節点文書]] : [VAR[文書]]
]FIG]
== [59] それ以外なら、
=== [60] [VAR[結果]]を、[[要素]]に設定します。
[FIG(list members middle)[
[FIGCAPTION[
[[要素]]
]FIGCAPTION]
: [F[インターフェイス][要素インターフェイス]] : [CODE(DOMi)@en[HTMLElement]]
: [F[属性リスト]] : [[空リスト]]
: [F[名前空間]] : [[HTML名前空間]]
: [F[名前空間接頭辞]] : [VAR[接頭辞]]
: [F[局所名]] : [VAR[局所名]]
: [F[[[[CODE[is]]値]]]] : [CODE[null]]
: [F[カスタム要素状態]] : [CODE[undefined]]
: [F[カスタム要素定義]] : [CODE[null]]
: [F[節点文書]] : [VAR[文書]]
]FIG]
=== [61] [VAR[結果]]と[VAR[定義]]について [[enqueue a custom element upgrade reaction]]
します。
== [54] [VAR[結果]]を返します。
= [44] それ以外なら、
== [34] 
[FIG(list)[
- [39] [VAR[名前空間]]が [[HTML名前空間]]
- [40] [VAR[局所名]]が[[妥当なカスタム要素名]]か、または [VAR[is]] が [CODE[null]] ではない
]FIG]
... のすべてを満たすなら、
=== [38] [VAR[カスタム要素状態]]を、 [CODE[undefined]] に設定します。
== [42] それ以外なら、
=== [41] [VAR[カスタム要素状態]]を、 [CODE[uncustomized]] に設定します。
== [35] 新しい[[要素]]を返します。
[FIG(list members middle)[
[FIGCAPTION[
[[要素]]
]FIGCAPTION]
: [F[インターフェイス]] : [VAR[局所名]]と[VAR[名前空間]]の[[要素インターフェイス]]
: [F[属性リスト]] : 空
: [F[名前空間]] : [VAR[名前空間]]
: [F[局所名]] : [VAR[局所名]]
: [F[[[[CODE[is]]値]]]] : [VAR[is]]
: [F[カスタム要素状態]] : [VAR[カスタム要素状態]]
: [F[カスタム要素定義]] : [CODE[null]]
: [F[節点文書]] : [VAR[文書]]
]FIG]
]FIG]

[36] この処理は、次の場面で呼び出されます。
[FIG(list short)[
- [[clone]]
- [CODE(DOMm)@en[createElement]]
- [[内部[CODE(DOMm)@en[createElementNS]]手順群]]
-- [CODE(DOMm)@en[createElementNS]]
-- [CODE(DOMm)@en[createDocument]]
- [CODE(DOMm)@en[createHTMLDocument]]
- [CODE(JS)@en[document.title]]
- [[table-created]]
-- [CODE(DOMm)@en[createCaption]]
-- [CODE(DOMm)@en[createTHead]]
-- [CODE(DOMm)@en[createTFoot]]
-- [CODE(DOMm)@en[createTBody]]
-- [CODE(DOMm)@en[insertRow]]
-- [CODE(DOMm)@en[insertCell]]
- [CODE(DOMi)@en[Audio][new Audio]] [[コンストラクター]]
- [CODE(DOMi)@en[Image][new Image]] [[コンストラクター]]
- [CODE(DOMi)@en[Option][new Option]] [[コンストラクター]]
- [[字句の要素の作成]]
]FIG]

[136] [[要素の作成]]を経由せずに[[要素]]が作成される場面もあります。
[FIG(middle list)[
- [CODE(DOMi)@en[HTMLElement]] [[コンストラクター]]
- [[字句の要素の作成]] (失敗時)
- [[素片構文解析]] ([CODE(HTMLe)@en[html]] [[要素]])
]FIG]

[138] [DFN[[VAR[[RUBYB[同期カスタム要素フラグ]@en[synchronous custom elements flag]]]]]]は、ほとんどの場合[[真]]に設定されますが、
[CODE(DOMa)@en[innerHTML]] など[[素片構文解析]]の場合や
[[clone]] の場合には、[[偽]]に設定されます。

* 要素依存の動作

[28] どの作成方法によっても共通して実行される[[要素]]の種類に依存する操作がいくつかあります。

[FIG(list middle)[
- [CODE(HTMLe)@en[[[img]]]] - [[update the image data]] [SRC[[[HTML Standard]]]]
- [CODE(HTMLe)@en[[[template]]]] [SRC[[[HTML Standard]]]]
- [CODE(HTMLe)@en[[[a]]]] [SRC[[[HTML Standard]]]]
- [CODE(HTMLe)@en[[[area]]]] [SRC[[[HTML Standard]]]]
- [CODE(HTMLe)@en[[[canvas]]]] [SRC[[[HTML Standard]]]]
- [CODE(HTMLe)@en[[[object]]]] [SRC[[[HTML Standard]]]]
- [CODE(HTMLe)@en[[[marquee]]]] [SRC[[[HTML Standard]]]]
- [CODE(HTMLe)@en[[[video]]]] [SRC[[[HTML Standard]]]]
- [CODE(HTMLe)@en[[[audio]]]] [SRC[[[HTML Standard]]]]
- [CODE(HTMLe)@en[[[track]]]] [SRC[[[HTML Standard]]]]
- [CODE(HTMLe)@en[[[frame]]]] [SRC[[[HTML Standard]]]]
- [CODE(HTMLe)@en[[[input]]]] [SRC[[[HTML Standard]]]]
- [CODE(HTMLe)@en[[[option]]]] [SRC[[[HTML Standard]]]]
- [[フォーム被関連付け要素]] [SRC[[[HTML Standard]]]]
- [CODE(HTMLe)@en[[[details]]]] [SRC[[[HTML Standard]]]]
- [CODE(HTMLe)@en[[[dialog]]]] [SRC[[[HTML Standard]]]]
]FIG]

;; 多くは初期状態の設定に関するものですが、いくつかは何らかの動作を開始させるものです。

* DOM メソッドの動作

[96] [CODE(DOMi)@en[Document]] [[インターフェイス]]の
[DFN[[CODE(DOMm)@en[createElement]]]] [[メソッド]]は、
[CODE(xattr IDL)@[CEReactions]] であり、かつ、
次のようにしなければ[MUST[なりません]]
[SRC[>>92]]。
[FIG(steps)[
= [97] [VAR[局所名]]を、必須の第1引数を[[文字列]]として解釈した結果に設定します。
= [98] [VAR[オプション群]]を、第2引数を省略可能な[[辞書]] [CODE(DOMi)@en[ElementCreationOptions]]
または [CODE[DOMString]] として解釈した結果に設定します。
= [99] [VAR[局所名]]が [CODE(XML)@en[Name]] でなければ、
== [100] [CODE(DOMe)@en[InvalidCharacterError]] を[[投げ]]、ここで停止します。
= [101] [[文脈オブジェクト]]が[F[HTML文書]]なら、
== [102] [VAR[局所名]]を、[VAR[局所名]]を[[ASCII小文字に変換]]した結果に設定します。
= [130] [VAR[オプション群]]が[[辞書]]の場合、
== [103] [VAR[is]] を、[VAR[オプション群]]の [CODE(DOMa)@en[is][is=""]] の値に設定します。
= [108] [[文脈オブジェクト]]の[F[型][文書の型]]が[[HTML文書]]か、
[[文脈オブジェクト]]の[F[内容型]]が [CODE(MIME)@en[application/xhtml+xml]] なら、
== [107] [VAR[名前空間]]を、[[HTML名前空間]]に設定します。
= [109] それ以外なら、
== [110] [VAR[名前空間]]を、[[null]] に設定します。
= [111] [VAR[要素]]を、[[要素の作成]]の結果に設定します。
[FIG(list members middle)[
: [VAR[文書]] : [[文脈オブジェクト]]
: [VAR[局所名]] : [VAR[局所名]]
: [VAR[名前空間]] : [VAR[名前空間]]
: [VAR[接頭辞]] : [[null]]
: [VAR[is]] : [VAR[is]]
: [VAR[同期カスタム要素フラグ]] : 設定する
]FIG]
[[例外]]が[[投げ]]られたら、改めて[[投げ]]てここで停止します。
= [114] [VAR[要素]]を返します。
]FIG]

[115] [[HTML文書]]の場合と、 [CODE(MIME)@en[application/xhtml+xml]]
の[[文書]]の場合は、自動的に [[HTML名前空間]]の[[要素]]が作られます。
それ以外の[[XML文書]]の場合は、 [[null名前空間]]の[[要素]]が作られます。

[HISTORY[
[116] [[DOM Standard]] は[[HTML名前空間]]に統一しようと試みましたが、
[[Web互換]]でないことがわかり、断念しました。
]HISTORY]

[118] [CODE(DOMi)@en[Document]] [[インターフェイス]]の
[DFN[[CODE(DOMm)@en[createElementNS]]]] [[メソッド]]は、
[CODE(xattr IDL)@[CEReactions]] であり、かつ、
次のようにしなければ[MUST[なりません]] [SRC[>>117]]。
[FIG(steps)[
= [119] [VAR[名前空間]]を、必須の第1引数を [CODE(IDL)@en[[[DOMString]][[?][? (WebIDL)]]]]
として解釈した結果に設定します。
= [120] [VAR[修飾名]]を、必須の第2引数を[[文字列]]として解釈した結果に設定します。
= [121] [VAR[オプション群]]を、第3引数を省略可能な[[辞書]]
[CODE(DOMi)@en[ElementCreationOptions]] または
[CODE[DOMString]] として解釈した結果に設定します。
= [122] [[内部[CODE(DOMm)@en[createElementNS手順群]]を[[文脈オブジェクト]]、
[VAR[名前空間]]、[VAR[修飾名]]、[VAR[オプション群]]について実行した結果を返します。
]FIG]

[123] [[内部[CODE(DOMm)@en[createElementNS]]手順群]]は、
[VAR[文書]]、[VAR[名前空間]]、[VAR[修飾名]]、[VAR[オプション群]]について、
次のようにします [SRC[>>117]]。
[FIG(steps)[
= [124] [VAR[名前空間]]、[VAR[接頭辞]]、[VAR[局所名]]を、
[VAR[修飾名]]と[VAR[名前空間]]について [[validate and extract]]
を適用した結果に設定します。[[例外]]が[[投げ]]られたら、改めて[[投げ]]てここで停止します。
= [131] [VAR[オプション群]]が[[辞書]]の場合、
== [125] [VAR[is]] を、[VAR[オプション群]]の [CODE(DOMa)@en[is][is=""]]
に設定します。
= [129] [VAR[要素]]を、[[要素の作成]]の結果に設定します。
[FIG(list members middle)[
: [VAR[文書]] : [[文脈オブジェクト]]
: [VAR[局所名]] : [VAR[局所名]]
: [VAR[名前空間]] : [VAR[名前空間]]
: [VAR[接頭辞]] : [VAR[接頭辞]]
: [VAR[is]] : [VAR[is]]
: [VAR[同期カスタム要素フラグ]] : 設定する
]FIG]
[[例外]]が[[投げ]]られたら、改めて[[投げ]]てここで停止します。
= [132] [VAR[要素]]を返します。
]FIG]

;; [133] この手順群は、 [CODE(DOMm)@en[createElementNS]] の他、
[CODE(DOMm)@en[createDocument]] からも呼び出されます。

[135] [[辞書]] [DFN[[CODE(DOMi)@en[ElementCreationOptions]]]] [SRC[>>134]] は、
[CODE(DOMm)@en[createElement]] や [CODE(DOMm)@en[createElementNS]]
の最後の省略可能な[[引数]]として指定できるオプション群です。
[FIG(list short)[
- [CODE(DOMa)@en[is][is=""]] ([CODE(IDL)@en[DOMString]])
]FIG]

* 構文解析器の動作

[8] [[HTML構文解析器]] [SRC[>>7]] や[[XML構文解析器]] [SRC[>>139]] 
[VAR[構文解析器]]による[[要素の作成]]は、
[DFN[[RUBYB[[[字句から要素を作成]]]@en[create an element for a token]]]]する手順 [SRC[>>7]]
によって行われます。この手順は、[[字句化器]]から得られた[[字句]]、
または [[HTML構文解析器]]内部の処理によって生成された架空の[[字句]]に基づき、
[[要素]]を作成します。具体的には、[VAR[字句]]と[VAR[名前空間]]と[VAR[想定親]]について、
次のように処理します [SRC[>>7]]。

[FIG(steps)[
= [140] [VAR[文書]]を、[VAR[想定親]]の[F[節点文書]]に設定します。
= [141] [VAR[局所名]]を、[VAR[字句]]の[F[タグ名]]に設定します。
= [142] [VAR[is]] を、[VAR[字句]]の [CODE[is][is=""]] [[属性]]の値に設定します。
= [143] [VAR[定義]]を、[VAR[文書]]、[VAR[名前空間]]、[VAR[局所名]]、[VAR[is]]
について[[カスタム要素定義を探す]]を実行した結果に設定します。
= [144] [VAR[定義]]が [[null]] ではなく、
[VAR[構文解析器]]が[[素片構文解析]]モードでないなら、
== [145] [VAR[スクリプト実行]]を、[[真]]に設定します。
= [146] それ以外なら、
== [147] [VAR[スクリプト実行]]を、[[偽]]に設定します。
= [148] [VAR[スクリプト実行]]が[[真]]なら、
== [149] [VAR[構文解析器]]の [F[throw-on-dynamic-markup-insertion counter]] を[[インクリメント]]します。
== [151] [[JavaScript実行文脈スタック]]が[[空]]なら、
=== [152] [[関連する類似起源閲覧文脈群の単位]]の[F[イベントループ]]について、
[[マイクロタスクチェックポイントを実行]]します。
== [153] [[関連する類似起源閲覧文脈群の単位]]の[F[カスタム要素反応群スタック]]に、
[[要素キュー]]を [[push]] します。
= [154] [VAR[要素]]を、[[要素の作成]]の結果に設定します。
[FIG(list members middle)[
: [VAR[文書]] : [VAR[文書]]
: [VAR[局所名]] : [VAR[局所名]]
: [VAR[名前空間]] : [VAR[名前空間]]
: [VAR[名前空間接頭辞]] : [[null]]
: [VAR[is]] : [VAR[is]]
: [VAR[同期カスタム要素フラグ]] : [VAR[スクリプト実行]]
]FIG]
= [9] [VAR[字句]]の[F[属性リスト]]の各[[属性]]について、
== [10] [VAR[要素]]に[[属性]]を[[追加][末尾に追加 (属性)]]します。
-- [14] [[XMLNS名前空間]]の [CODE(XMLa)@en[[[xmlns]]]] [[属性]]や
[CODE(XMLa)@en[[[xmlns:xlink]]]] [[属性]]が設定される場合、
その[[属性値]]がそれぞれ[VAR[名前空間]]や[[XLink名前空間]]でなければ、
[[構文解析エラー]]です [SRC[>>7]]。
= [11] [VAR[スクリプト実行]]が[[真]]なら、
== [13] [VAR[キュー]]を、[[関連する類似起源閲覧文脈群の単位]]の[F[カスタム要素反応群スタック]]を [[pop]] した結果に設定します。
== [15] [VAR[キュー]]について[[カスタム要素反応群の呼び出し]]を実行します。
== [155] [VAR[構文解析器]]の [F[throw-on-dynamic-markup-insertion counter]] を[[デクリメント]]します。
= [16] [VAR[要素]]が[[再設定可能要素]]なら、
== [158] [VAR[要素]]について[[再設定アルゴリズム]]を呼び出します。
= [17]
[FIG(list)[
- [18] [VAR[要素]]が[[フォーム被関連付け要素]]である
- [19] [VAR[構文解析器]]の[F[[[[CODE(HTMLe)@en[form]]要素指示子]]]]が [[null]] ではない
- [20] [VAR[構文解析器]]の[F[開いている要素のスタック]]に [CODE(HTMLe)@en[[[template]]]] [[要素]]がない
- [21] [VAR[要素]]が[[被列挙要素]]でないか、
[VAR[要素]]が [CODE(HTMLa)@en[form][form=""]] [[属性]]を持たない
- [22] [VAR[想定親]]と[VAR[構文解析器]]の[F[[[[CODE(HTMLe)@en[form]]要素指示子]]]]の[[要素]]が同じ[[木]]にある
]FIG]
... のすべてを満たすなら、
== [24] [VAR[要素]]を[VAR[構文解析器]]の[F[[[[CODE(HTMLe)@en[form]]要素指示子]]]]の[[要素]]に[[関連付け][フォーム関連付け]]します。
== [25] [VAR[要素]]の[F[構文解析器挿入フラグ]]を、[[真]]に設定します。
= [29] [VAR[要素]]を返します。
]FIG]

[26] ここで、[DFN[[VAR[[RUBYB[想定親]@en[intended parent]]]]]]は、
[VAR[要素]]が[[挿入]]されることになる[[節点]]です。ただし [[AAA]]
内で作成されるときは、[[親節点]]自体ではなく、[[祖先]]となることがあります。
この[VAR[想定親]]は、[[節点文書]]の決定と[[フォーム所有者]]の処理に使われています。
通常は[[構文解析]]の対象となる[[文書]]を[[根]]とする[[木]]に[[挿入]]することになるのですが、
[VAR[要素]]が [CODE(HTMLe)@en[template]] [[要素]]の[[雛形内容]]に属することになる場合や、
[[スクリプト]]によって[[挿入]]先が本来の[[文書]]の[[木]]から除去されている場合があり得ます。

[159] この処理への入力となる[VAR[字句]]は、[F[タグ名]]や[[属性]]の[F[名前][属性名]]の[[大文字]]や[[小文字]]の正規化が済んだものです。

[27] [[構文解析器]]は、 [CODE(DOMm)@en[[[createElementNS]]]] だと[[例外]]が発生して作成できない[[名前]]を持つ[[要素]]や[[属性]]を作成することがあります。

[4] [[構文解析器]]による[[要素]]の作成の場合、[[属性]]の順序は仕様上未定義とされています。

;; 通常は、[[属性]]は追加された順序が保持されます。

[12] 多くの実装では、[[ソースコード]]に現れた順序、またはその逆順となります。

[6] [[HTML構文解析器]]や[[XML構文解析器]]によって作成された [CODE(HTMLe)@en[[[script]]]]
[[要素]]は特別なフラグが設定されます。
[SEE[ [CODE(HTMLe)@en[script]] ]]

[3] [[HTML構文解析器]]と[[XML構文解析器]]で[[媒体要素]]を作成した場合には、
[[blocked-on-parser]] フラグが真に設定されます [SRC[>>2]]。

;; このフラグは[[開いている要素のスタック]]から外された時に偽に設定されます。

[5] [[フォーム所有者の再設定]]は、通常の[[挿入]]時とは若干異なる形で行われます [SRC[>>7]]。
[[仕様書]]は動的[[猿パッチ]]的な記述になっていますが、
[F[「構文解析器挿入」]]フラグのようなものが必要だと思われます。

[160] [[字句の要素の作成]]で作成された[[要素]]は、直ちに[[文書]]に[[挿入]]されます。
[[カスタム要素]]の場合は[[カスタム要素構築器]]が実行されますが、
それ以外の方法やそれ以外の[[要素]]が[[挿入]]前の状態で[[スクリプト]]からアクセスされることはありません。

[161] [[カスタム要素構築器]]を使うと [[AAA]] の途中段階も観察できることに
(少なくても[[仕様書]]上は) なっているようです。

* 歴史

** DOM0 時代

[71] [[Netscape]] の [[JavaScript]] では、
[CODE(DOMi)@en[Image]] や [CODE(DOMi)@en[Option]] の[[コンストラクター]]だけが[[要素]]を作成する方法でした。
(もちろん他に[[HTML構文解析器]]と [CODE(JS)@en[document.write]]
がありましたが、当時はまだ[[文書木]]がありませんでした。)

** W3C DOM 時代

[93] [CODE(DOMm)@en[createElement]] は [[DOM1]] で追加されました。

[94] [[MSHTML]] では [CODE(DOMi)@en[[[HTMLDocument2]]]] で実装されていました。

[95] [CODE(DOMm)@en[createElementNS]] は [[DOM2 HTML]] で追加されました。

[62] [CITE[Bug 280692 - createElement breaks DOM spec for HTML and XUL documents]] <https://bugzilla.mozilla.org/show_bug.cgi?id=280692>

[70] [CITE[d:id:quaa]] ([CODE[2007-03-21 23:49:00 +09:00]] 版) <http://d.hatena.ne.jp/quaa/20070321#p2>
([[名無しさん]] [WEAK[2007-03-21 23:59:07 +00:00]])

[72] [[DOM水準1]]と[[DOM水準2]]では、 [CODE(DOMm)@en[createElement]] は [[HTML]] [[文書]]では
[CODE(DOMp)@en[[[tagName]]]] は[[大文字]][[正準形]]に[[実装]]が[[写像]]しなければならないと明記されていました。

[[DOM水準3]]では、[[XML]] 以外の[[マーク付け言語]]においては[[大文字]]と[[小文字]]を区別するか否かは[[マーク付け言語]]に依存し、
区別しない場合には[[実装]]が[[正準形]]に[[写像]]しなければならないと述べています。

[73] [[DOM水準2]]と[[DOM水準3]]では、
[CODE(DOMm)@en[createElement]] は
[CODE(DOMa)@en[[[localName]]]] は
[CODE(IDL)@en[[[null]]]] にすると述べています。

[74] [[DOM水準3]]では [CODE(DOMm)@en[createElement]] は [CODE(DOMp)@en[[[tagName]]]]
が [CODE(XMLa)@en[[[xmlVersion]]]] に照らして正しい[[名前]]でなければ
[CODE(DOMc)@en[[[INVALID_CHARACTER_ERR]]]]
とされていますが、 [[HTML]] [[文書]]の場合にどうなるのかは不明です。

[75] [CITE[あるSEのつぶやき: IE7でHTMLに存在しない要素にスタイルシートを適用する方法]] ([CODE[2008-03-09 21:53:37 +09:00]] 版) <http://fnya.cocolog-nifty.com/blog/2008/01/ie7html_faf9.html>

[76] [CITE[document.createElement()にタグではなくHTMLを指定してみる(IE限定) - uupaaの開発日記]] ([TIME[2009-01-09 07:43:07 +09:00]] 版) <http://d.hatena.ne.jp/uupaa/20080718/1216362040>

[77] [[DOM水準3]]で [CODE(DOMm)@en[createElementNS]] の
[CODE(DOMc)@en[[[NAMESPACE_ERR]]]] の条件が増えています:
[FIG(list)[
- [[名前空間接頭辞]]が [CODE(XML)@en[[[xmlns]]]] で
[[名前空間URI]] が [CODE(URI)@en[[[http://www.w3.org/2000/xmlns/]]]] ではない
- [[修飾名]]が [CODE(XMLa)@en[[[xmlns]]]] で[[名前空間URI]]
が [CODE(URI)@en[[[http://www.w3.org/2000/xmlns/]]]] ではない
- [[名前空間URI]] が
[CODE(URI)@en[[[http://www.w3.org/2000/xmlns/]]]]
で[[修飾名]]または[[名前空間接頭辞]]が
[CODE(XML)@en[[[xmlns]]]] ではない
]FIG]

[78] [[Firefox]] 1.5 と [[Opera]] 9 Preview 1 は
[CODE(DOMm)@en[[[createElement]]]] や
[CODE(DOMm)@en[[[createElementNS]]]]
で[[既定属性]]を追加しません。

;; [[Opera]] は[[構文解析]]の時にも[[既定属性]]を
([[内部部分集合]]にあっても) 追加しません。
[[Firefox]] は追加しますが、
[CODE(DOMa)@en[[[specified]]]] は
[CODE(IDL)@en[[[true]]]] になっています。

[79] [CODE(DOMm)@en[createElementNS]] は
[CODE(DOMa)@en[[[qualifiedName]]]] が[[修飾名]]でなければ
[CODE(DOMc)@en[[[NAMESPACE_ERR]]]] ですが、
その [[XML]] の[[版]]に関して・・・ [CODE(DOMm)@en[[[createAttributeNS]]]] 
を参照。

** HTML5 時代

[80] [CITE[IRC logs: freenode / #whatwg / 20090312]] ([TIME[2009-04-26 16:50:56 +09:00]] 版) <http://krijnhoetmer.nl/irc-logs/whatwg/20090312#l-333>

> [14:35] <Lachy> hsivonen, document.createElement("foo").namespaceURI returns the XHTML namespace in an XHTML document.
> [14:37] <Lachy> for an SVG document, Opera returns the SVG namespace, but Gecko and WebKit return the XHTML namespace still 

[81] [CITE[Bug 280692 – createElement breaks DOM spec for HTML and XUL documents]]
([TIME[2009-10-12 19:16:05 +09:00]] 版)
<https://bugzilla.mozilla.org/show_bug.cgi?id=280692>

[82] [CITE[IRC logs: freenode / #whatwg / 20091007]]
([TIME[2009-12-07 22:54:41 +09:00]] 版)
<http://krijnhoetmer.nl/irc-logs/whatwg/20091007#l-342>

[83] [CITE@en[Bug 24271 – Document.createElement name validation inconsistent with HTML parse rules]]
( ([TIME[2014-01-12 16:15:53 +09:00]] 版))
<https://www.w3.org/Bugs/Public/show_bug.cgi?id=24271>

[84] [CITE[IRC logs: freenode / #whatwg / 20140113]]
( ([TIME[2014-01-15 08:51:21 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20140113#l-241>

[85] [CITE@en[Bug 19431 – Namespace of elements made via .createElement() in XML documents must be null]]
( ([TIME[2014-05-05 04:00:37 +09:00]] 版))
<https://www.w3.org/Bugs/Public/show_bug.cgi?id=19431>

[86] [CITE@en[CreateElement no longer supports angle brackets (Windows)]]
( ([TIME[2014-05-23 06:19:11 +09:00]] 版))
<http://msdn.microsoft.com/en-us/library/ie/ff986077(v=vs.85).aspx>

[87] [CITE@en[Change .createElement() namespace to match UAs by ayg · Pull Request #213 · whatwg/dom]]
([TIME[2016-04-16 23:44:02 +09:00]] 版)
<https://github.com/whatwg/dom/pull/213>

** カスタム要素への対応

[88] [CITE@en[Add support for custom elements · whatwg/dom@7f63535]]
([TIME[2016-04-13 22:20:44 +09:00]] 版)
<https://github.com/whatwg/dom/commit/7f63535da39a1cbf7f8f68563abc6f05f760990a>

[89] [CITE@en[Change createElement() namespace to match implementations · whatwg/dom@c8ae9cb]]
([TIME[2016-04-19 23:15:35 +09:00]] 版)
<https://github.com/whatwg/dom/commit/c8ae9cbd46ca3175e07b7f205ebe375805013119>

[90] [CITE@en[Editorial: make "is" and "prefix" optional in "create an element" · whatwg/dom@5fc5624]]
([TIME[2016-04-20 12:30:17 +09:00]] 版)
<https://github.com/whatwg/dom/commit/5fc5624fb80648de46088cac06864b4048c1981c>

[91] [CITE@en[Editorial: createDocument should not invoke createElementNS directly · whatwg/dom@4d5ae94]]
([TIME[2016-04-09 16:02:16 +09:00]] 版)
<https://github.com/whatwg/dom/commit/4d5ae94463a464adf6d7a8eacb4bf1b578ce0905>

[137] [CITE@en[Fix the owner document for all element constructors]]
( ([[domenic]]著, [TIME[2016-05-03 06:57:30 +09:00]]))
<https://github.com/whatwg/html/commit/c9d898386d7b79cf1c7e104b5768e393c924078f>

[162] [CITE@en[Don't set custom element state redundantly]]
( ([[domenic]]著, [TIME[2016-05-24 17:15:10 +09:00]]))
<https://github.com/whatwg/dom/commit/d077da16b7fc307fc51820dbe541f6cf0b088115>

[58] [CITE@en[createElement() cannot just depend on content type]]
( ([[smaug----]]著, [TIME[2016-06-08 02:45:22 +09:00]]))
<https://github.com/whatwg/dom/commit/fb1c9863b16c39ae880becdac90e1156a8d61cde>

[163] [CITE@en[Clarify that the namespace check in "create an element" is redundant]]
( ([[domenic]]著, [TIME[2016-06-16 16:22:57 +09:00]]))
<https://github.com/whatwg/dom/commit/182e89f5355cbf90d263f7fffef812e7012dd945>

[164] [CITE@en[Save the is="" value an element was created with]]
([[domenic]]著, [TIME[2016-06-03 15:12:10 +09:00]])
<https://github.com/whatwg/dom/commit/754bb8d533f1db664c6c00ddbe565b64cff18811>

[167] [CITE@en[Set the stage for new custom element adoption semantics]]
([[domenic]]著, [TIME[2016-07-21 18:25:26 +09:00]])
<https://github.com/whatwg/dom/commit/674e9343c811b178b5d1821e469682df0aa616f9>

[168] [CITE@en[Mark more elements in browsing-context-less documents as "undefined"]]
([[domenic]]著, [TIME[2016-08-15 19:18:39 +09:00]])
<https://github.com/whatwg/dom/commit/6b1b1da6114841e3288d03abc8d40f82af2dfdf2>

[37] [CITE@en[Make document.write etc. throw during parsing custom elements]]
([[domenic]]著, [TIME[2016-08-17 15:44:39 +09:00]])
<https://github.com/whatwg/html/commit/00c6fa07bdb9f0d08a28f6c6e1ababca7d08618c>

[150] [CITE@en[Change createElement to report exceptions instead of rethrowing]]
([[domenic]]著, [TIME[2016-10-11 16:43:50 +09:00]])
<https://github.com/whatwg/dom/commit/eb28710ba62bef69e60c5231c4aa78f20ce7b1e7>

[173] [CITE@en[Update the parser's element creation for recent DOM changes]]
([[domenic]]著, [TIME[2016-10-11 05:46:59 +09:00]])
<https://github.com/whatwg/html/commit/cf2c5759ed0a6a8c8855c6cb67835679234767f9>

[166] [CITE@en[Remove incorrect customized built-in element checks]]
([[domenic]]著, [TIME[2016-11-16 04:59:09 +09:00]])
<https://github.com/whatwg/dom/commit/766a5e7b8856fb5b90579e56ca1dc8497d28f144>

[104] [CITE@en[Bug 25893 – createElement should support passing markup instead of just element name, e.g. document.createElement("<select readonly>")]]
([TIME[2017-03-17 16:07:11 +09:00]])
<https://bugs.webkit.org/show_bug.cgi?id=25893>

[105] [CITE@en[489532 - document.createElement("<x>") does not throw in quirks mode]]
([TIME[2017-03-17 16:07:58 +09:00]])
<https://bugzilla.mozilla.org/show_bug.cgi?id=489532>

[106] [CITE@en[Use Web IDL to construct custom element constructors]]
([[domenic]]著, [TIME[2017-03-28 13:20:59 +09:00]])
<https://github.com/whatwg/dom/commit/1ca094a209ba020348ac146c8bda157b7c5f3212>

[126] [CITE@en[Validating a qualified name does not match browsers in a corner case · Issue #319 · whatwg/dom]]
([TIME[2017-04-23 21:52:38 +09:00]])
<https://github.com/whatwg/dom/issues/319>

[127] [CITE@en[Use a single exception for name validation]]
([[annevk]]著, [TIME[2017-03-17 03:21:31 +09:00]])
<https://github.com/whatwg/dom/commit/61f40b0763e1c5aac94014b23fb37606e9e2caca>

[128] [CITE@en[Acid3 and createElementNS()]]
([[Anne van Kesteren]]著, [TIME[2017-04-24 16:20:19 +09:00]])
<https://lists.w3.org/Archives/Public/www-archive/2017Apr/0009.html>

[174] [CITE@en[Use a single exception for name validation]]
([[annevk]]著, [TIME[2017-03-17 03:21:31 +09:00]])
<https://github.com/whatwg/dom/commit/61f40b0763e1c5aac94014b23fb37606e9e2caca>

[175] [CITE@en[Track HTML parser form-associated elements with a flag]]
([[annevk]]著, [TIME[2017-08-19 16:02:48 +09:00]])
<https://github.com/whatwg/html/commit/384c30c56d6dfd26dfbd3a5024ae10e7f7134483>

[176] [CITE@en[Add '''['''CEReactions''']''' to createElement()]]
([[annevk]]著, [TIME[2017-10-17 15:58:41 +09:00]])
<https://github.com/whatwg/dom/commit/fb6638fa3d02985e43782d8857edaa915d499261>

[177] [CITE@en[Add '''['''CEReactions''']''' to createElement() by annevk · Pull Request #506 · whatwg/dom]]
([TIME[2017-10-18 16:35:42 +09:00]])
<https://github.com/whatwg/dom/pull/506>

[178] [CITE@en[Change handling of is="" in element creation and cloning]]
([[domenic]]著, [TIME[2018-02-14 09:25:26 +09:00]])
<https://github.com/whatwg/dom/commit/fc601be94e75427c3eb35d63ada0f6dc41f9f344>

[112] [CITE@en[Change handling of is="" in element creation and cloning by domenic · Pull Request #566 · whatwg/dom]]
([TIME[2018-02-17 23:01:30 +09:00]])
<https://github.com/whatwg/dom/pull/566>

[113] [CITE@en[createElement/createElementNS()'s dictionary argument can be a string]]
([[annevk]]著, [TIME[2018-02-26 16:03:40 +09:00]])
<https://github.com/whatwg/dom/commit/c05ca607993f129cef181686ae3b88fc86c34368>

[179] [CITE@en[Polymer encouraged incorrect document.createElement() usage · Issue #544 · w3c/webcomponents]]
([TIME[2018-02-27 17:04:36 +09:00]])
<https://github.com/w3c/webcomponents/issues/544>

[180] [CITE@en[Allow createElement/createElementNS()'s dictionary argument to be a s… by annevk · Pull Request #572 · whatwg/dom]]
([TIME[2018-02-27 17:05:20 +09:00]])
<https://github.com/whatwg/dom/pull/572>

[181] [CITE@en[1294100 - TypeError: Argument 2 of Document.createElement can't be converted to a dictionary.]]
([TIME[2018-02-27 17:05:50 +09:00]])
<https://bugzilla.mozilla.org/show_bug.cgi?id=1294100>

[182] [CITE@en[Editorial: ShadowRoot is sufficiently upstreamed]]
([[annevk]]著, [TIME[2018-03-23 19:04:02 +09:00]])
<https://github.com/whatwg/dom/commit/5be84cc52d072197cae81131badd10751f9e1d51>