DOM

現行標準 — 最終更新

参加方法:
GitHub whatwg/dom新しいissueオープン中のissue
Matrixでチャット
コミット:
GitHub whatwg/dom/commits
このコミット時点のスナップショット
@thedomstandard
テスト:
web-platform-tests dom/進行中の作業
翻訳 (参考訳):
日本語
简体中文
한국어

概要

DOMは、イベント、アクティビティの中断、ノードツリーのためのプラットフォーム非依存のモデルを定義します。

1. 基盤

この仕様はInfra Standardに依存しています。[INFRA]

この仕様で使用されるいくつかの用語は、EncodingSelectorsWeb IDLXML、およびNamespaces in XMLで定義されています。 [ENCODING] [SELECTORS4] [WEBIDL] [XML] [XML-NAMES]

拡張が必要な場合、DOM標準を適宜更新するか、他の仕様で提供される拡張フックに接続する新しい標準を作成できます。 適用可能な仕様

1.1. ツリー

ツリーは、有限階層構造のツリーです。 ツリー順は、 ツリーの前順・深さ優先の走査です。

ツリーに属する ツリーに属するオブジェクトは、(nullまたはオブジェクト)を持ち、(オブジェクトの順序付き集合)を持ちます。オブジェクトAがオブジェクトBであれば、ABです。

は、そのがnullなら自身であり、 そうでなければそのです。 ツリーは、そのツリーに属するオブジェクトのうち、がnullのものです。

オブジェクトAは、オブジェクトB子孫 であると言い、ABであるか、AがオブジェクトCであり、かつCB子孫である場合です。

包括的子孫は、オブジェクト自身またはその子孫です。

オブジェクトAは、オブジェクトB祖先 であると言い、BA子孫である場合のみ成立します。

包括的祖先は、オブジェクト自身またはその祖先です。

オブジェクトAは、オブジェクトB兄弟 であると言い、BAが同じ非nullのを持つ場合のみ成立します。

包括的兄弟は、オブジェクト自身またはその兄弟です。

オブジェクトAは、オブジェクトB前方 であると言い、ABが同じツリーに属し、 ABよりツリー順で前にある場合です。

オブジェクトAは、オブジェクトB後方 であると言い、ABが同じツリーに属し、 ABよりツリー順で後ろにある場合です。

最初の子は、オブジェクトの最初のであり、 がいなければnullです。

最後の子は、オブジェクトの最後のであり、 がいなければnullです。

前の兄弟は、オブジェクトの最初の前方兄弟であり、前方兄弟がいなければnullです。

次の兄弟は、オブジェクトの最初の後方兄弟であり、後方 兄弟がいなければnullです。

インデックスは、オブジェクトの前方 兄弟の数であり、いなければ0です。

1.2. 順序付き集合

順序付き集合パーサーは、文字列inputを受け取り、次の手順を実行します:

  1. inputTokensASCII空白で分割した結果とする。

  2. tokensを新しい順序付き集合とする。

  3. inputTokenstokenについて、tokenをtokensに追加する。

  4. tokensを返す。

順序付き集合シリアライザは、 setを受け取り、U+0020 SPACEで連結した結果を返します。

1.3. セレクター

セレクター文字列のスコープマッチ selectorsnodeに対して行うには、次の手順を実行します:

  1. sselectorsをパースした結果とする。 [SELECTORS4]

  2. sが失敗なら、throwし、 "SyntaxError" DOMExceptionを投げる。

  3. snodeツリーに対してセレクターをマッチし、 スコープルートnodeを使う。[SELECTORS4]

セレクター内での名前空間対応は予定されておらず、追加されません。

1.4. 名前の検証

文字列は、 有効な名前空間プレフィックスであり、 長さが1以上で、 ASCII空白、U+0000 NULL、U+002F (/)、U+003E (>) を含まない場合です。

文字列は、 有効な属性ローカル名であり、 長さが1以上で、 ASCII空白、U+0000 NULL、U+002F (/)、U+003D (=)、U+003E (>) を含まない場合です。

文字列 nameは、以下の手順でtrueが返されれば有効な要素ローカル名です:

  1. name長さが0なら、falseを返す。

  2. nameの0番目の符号位置ASCII英字なら、

    1. nameASCII空白、U+0000 NULL、U+002F (/)、U+003E (>) を含むならfalseを返す。

    2. trueを返す。

  3. nameの0番目の符号位置がU+003A (:)、U+005F (_)でなく、 U+0080~U+10FFFFの範囲でもなければfalseを返す。

  4. nameの残りの符号位置(存在する場合)が ASCII英字ASCII数字、 U+002D (-)、U+002E (.)、U+003A (:)、U+005F (_)、 またはU+0080~U+10FFFFの範囲でないならfalseを返す。

  5. trueを返す。

この概念は、DOM APIで生成される要素ローカル名の検証に使われます。HTMLパーサーで生成可能な名前を許容するのが意図であり(最初の符号位置ASCII英字の場合)、加えて歴史的な理由でASCII範囲では制限されているが、ASCII以外は何でも許容されます。

以下のJavaScript互換の正規表現は、 有効な要素ローカル名の実装例です:

/^(?:[A-Za-z][^\0\t\n\f\r\u0020/>]*|[:_\u0080-\u{10FFFF}][A-Za-z0-9-.:_\u0080-\u{10FFFF}]*)$/u

文字列は、 有効なDOCTYPE名であり、 ASCII空白、U+0000 NULL、U+003E (>) を含まない場合です。

空文字列も有効なDOCTYPE名です。

バリデートと抽出 namespacequalifiedNameを、contextを元に行うには:

  1. namespaceが空文字列なら、nullに設定する。

  2. prefixをnullにする。

  3. localNamequalifiedNameにする。

  4. qualifiedNameがU+003A (:) を含む場合:

    1. splitResultqualifiedNameをU+003A (:)で厳密分割した結果とする。

    2. prefixsplitResult[0]を設定する。

    3. localNamesplitResult[1]を設定する。

    4. prefix有効な名前空間プレフィックスでなければ、 throwし、 "InvalidCharacterError" DOMExceptionを投げる。

  5. Assertprefixはnullまたは有効な名前空間プレフィックスであること。

  6. contextが"attribute"で、localName有効な属性ローカル名でないなら、 throwし、"InvalidCharacterError" DOMExceptionを投げる。

  7. contextが"element"で、localName有効な要素ローカル名でないなら、 throwし、"InvalidCharacterError" DOMExceptionを投げる。

  8. prefixがnullでなく、namespaceがnullなら、 throwし、 "NamespaceError" DOMExceptionを投げる。

  9. prefixが"xml"で、namespaceXML名前空間でないなら、 throwし、 "NamespaceError" DOMExceptionを投げる。

  10. いずれかqualifiedNameまたはprefixが"xmlns"で、 namespaceXMLNS名前空間でないなら、 throwし、 "NamespaceError" DOMExceptionを投げる。

  11. namespaceXMLNS名前空間で、 qualifiedNameまたはprefixが"xmlns"でないなら、 throwし、 "NamespaceError" DOMExceptionを投げる。

  12. (namespace, prefix, localName) を返す。

この仕様の各APIは、名前空間プレフィックス、属性ローカル名、要素ローカル名、DOCTYPE名をより厳密に検証していました。これは様々なXML関連仕様に合わせたものでした(ただし全ての仕様のルールが適用されたわけではありません)。

しかし、HTMLパーサーで生成可能な名前がDOM APIでは生成できないことがあり、Web開発者にとって煩わしいことが判明したため、検証は上記のように緩和されました。

2. イベント

2.1. 「DOMイベント」の紹介

ウェブプラットフォーム全体で、イベントは、ネットワーク活動やユーザー操作などの発生を通知するためにオブジェクトに発行されます。これらのオブジェクトは EventTarget インターフェースを実装しているため、addEventListener() を呼び出すことでイベントリスナーを追加し、イベントを監視できます。

obj.addEventListener("load", imgFetched)

function imgFetched(ev) {
  // great success}

イベントリスナーは、 removeEventListener() メソッドを使って同じ引数を渡すことで削除できます。

また、AbortSignaladdEventListener() に渡し、そのシグナルを管理するコントローラーでabort() を呼ぶことでイベントリスナーを削除することもできます。

イベントもオブジェクトであり、 Eventインターフェース(または派生インターフェース)を実装します。上の例では evイベントです。 evイベントリスナーコールバック (通常はJavaScriptの関数)に引数として渡されます。 イベントリスナーは、 イベントtype 属性値(上の例では"load")をキーにします。 イベントtarget 属性値は イベント発行されたオブジェクト(上記ではobj)を返します。

通常イベントはユーザーエージェントによってユーザー操作やタスク完了の結果として発行されますが、アプリケーションから合成イベント(シンセティックイベント)として イベントを自分で発行することもできます:

// 適切なイベントリスナーを追加
obj.addEventListener("cat", function(e) { process(e.detail) })

// イベントを作成して発行
var event = new CustomEvent("cat", {"detail":{"hazcheeseburger":true}})
obj.dispatchEvent(event)

シグナリング以外にも、イベントは、 操作の次の処理をアプリケーション側で制御できるように使われることがあります。例えば、フォーム送信の一部として、 type属性値が "submit" であるイベント発行されます。 このイベントpreventDefault() メソッドが呼び出されると、フォーム送信は中止されます。この機能をイベント(アプリケーションで発行される、合成イベント)を通じて利用したい場合は、 dispatchEvent() メソッドの返り値を利用できます。

if(obj.dispatchEvent(event)) {
  // イベントはキャンセルされなかったので、何か魔法を実行}

イベントツリーに属するオブジェクト(例:要素)に発行された場合、 そのオブジェクトの祖先イベントリスナーにも到達することがあります。実際には、全ての包括的祖先イベントリスナーのうち、captureがtrueのものが ツリー順で呼ばれます。そして、イベントbubbles がtrueなら、今度は包括的祖先イベントリスナーのうちcaptureがfalseのものが逆順で呼ばれます。

イベントツリーでどのように動作するか、例を見てみましょう:

<!doctype html>
<html>
 <head>
  <title>Boring example</title>
 </head>
 <body>
  <p>Hello <span id=x>world</span>!</p>
  <script>
   function test(e) {
     debug(e.target, e.currentTarget, e.eventPhase)
   }
   document.addEventListener("hey", test, {capture: true})
   document.body.addEventListener("hey", test)
   var ev = new Event("hey", {bubbles:true})
   document.getElementById("x").dispatchEvent(ev)
  </script>
 </body>
</html>

debug関数は2回呼ばれます。どちらの時もイベントtarget 属性値はspan 要素です。最初は currentTarget 属性値がdocument、2回目はbody 要素となります。 eventPhase 属性値は CAPTURING_PHASE からBUBBLING_PHASEに切り替わります。 span 要素にイベントリスナーが登録されていた場合、eventPhase 属性値はAT_TARGETになります。

2.2. インターフェース Event

[Exposed=*]
interface Event {
  constructor(DOMString type, optional EventInit eventInitDict = {});

  readonly attribute DOMString type;
  readonly attribute EventTarget? target;
  readonly attribute EventTarget? srcElement; // legacy
  readonly attribute EventTarget? currentTarget;
  sequence<EventTarget> composedPath();

  const unsigned short NONE = 0;
  const unsigned short CAPTURING_PHASE = 1;
  const unsigned short AT_TARGET = 2;
  const unsigned short BUBBLING_PHASE = 3;
  readonly attribute unsigned short eventPhase;

  undefined stopPropagation();
           attribute boolean cancelBubble; // legacy alias of .stopPropagation()
  undefined stopImmediatePropagation();

  readonly attribute boolean bubbles;
  readonly attribute boolean cancelable;
           attribute boolean returnValue;  // legacy
  undefined preventDefault();
  readonly attribute boolean defaultPrevented;
  readonly attribute boolean composed;

  [LegacyUnforgeable] readonly attribute boolean isTrusted;
  readonly attribute DOMHighResTimeStamp timeStamp;

  undefined initEvent(DOMString type, optional boolean bubbles = false, optional boolean cancelable = false); // legacy
};

dictionary EventInit {
  boolean bubbles = false;
  boolean cancelable = false;
  boolean composed = false;
};

Event オブジェクトは、単に イベント と呼ばれます。これは、何かが発生したこと(例:画像のダウンロードが完了したこと)を通知できます。

潜在的なイベントターゲットは、null または EventTarget オブジェクトです。

イベントには、target潜在的なイベントターゲット)が関連付けられています。特に記載がない限り、これは null です。

イベントには、relatedTarget潜在的なイベントターゲット)が関連付けられています。特に記載がない限り、これは null です。

他の仕様では relatedTarget を使って relatedTarget 属性を定義します。[UIEVENTS]

イベントには、touch target listリスト。0個以上の潜在的なイベントターゲット)が関連付けられています。特に記載がない限り、空リストです。

touch target listは、TouchEventインターフェースおよび関連インターフェースの定義専用です。[TOUCH-EVENTS]

イベントには、pathが関連付けられています。pathは、リストで、各構造体には、 invocation targetEventTarget オブジェクト)、 invocation-target-in-shadow-tree(真偽値)、 shadow-adjusted target潜在的なイベントターゲット)、 relatedTarget潜在的なイベントターゲット)、 touch target listリスト潜在的なイベントターゲット)、 root-of-closed-tree(真偽値)、 slot-in-closed-tree(真偽値)が含まれます。 pathは最初は空リストです。

event = new Event(type [, eventInitDict])
新しい event を返します。type属性値が type になります。eventInitDict 引数により、bubbles および cancelable属性を同名のオブジェクトメンバーで設定できます。
event . type
event のタイプ(例: "click"、"hashchange"、"submit")を返します。
event . target
event発行されたオブジェクト(target)を返します。
event . currentTarget
現在コールバックが実行されているイベントリスナーのオブジェクトを返します。
event . composedPath()
eventinvocation target オブジェクト(リスナーが呼ばれるオブジェクト)のリストを返します。ただし、eventcurrentTargetから到達できない closed モードの shadow root を持つ shadow tree 内のノードは除外されます。
event . eventPhase
event のフェーズを返します。値は NONECAPTURING_PHASEAT_TARGETBUBBLING_PHASE のいずれかです。
event . stopPropagation()
ツリー内で 発行された場合、このメソッドを呼ぶと event が現在のオブジェクト以外に到達しなくなります。
event . stopImmediatePropagation()
このメソッドを呼ぶと、現在のリスナー以降の登録済みイベントリスナーには到達せず、ツリー内で 発行された場合、他のオブジェクトにも到達しなくなります。
event . bubbles
event の初期化方法によって true または false を返します。true の場合、eventtarget祖先を逆ツリー順で辿ります。false の場合は辿りません。
event . cancelable
event の初期化方法によって true または false を返します。true の場合、event発行元の処理を preventDefault() メソッドでキャンセルできます。
event . preventDefault()
cancelable 属性値が true で、かつ event のリスナーの passive が false の場合、このメソッドを呼ぶと発行元の処理をキャンセルするよう指示します。
event . defaultPrevented
preventDefault() が正常に呼ばれキャンセル指示された場合は true、それ以外は false を返します。
event . composed
event の初期化方法によって true または false を返します。true の場合、eventroot である ShadowRoot ノードを越えてリスナーを呼びます。false の場合は越えません。
event . isTrusted
event がユーザーエージェントによって 発行された場合は true、それ以外は false を返します。
event . timeStamp
event の発生時刻(ミリ秒単位)を返します。

type属性は初期化された値を返さなければなりません。イベントが作成されたとき、この属性は空文字列で初期化されなければなりません。

targetゲッターの手順は、thistargetを返すことです。

srcElementゲッターの手順は、thistargetを返すことです。

currentTarget属性は初期化された値を返さなければなりません。イベントが作成されたとき、この属性はnullで初期化されなければなりません。

composedPath()メソッドの手順は以下の通りです:

  1. composedPathを空のリストとする。

  2. paththispathとする。

  3. pathなら、composedPathを返す。

  4. currentTargetthiscurrentTarget 属性値とする。

  5. AssertcurrentTargetEventTargetオブジェクトであること。

  6. AppendcurrentTargetcomposedPathに追加する。

  7. currentTargetIndexを0とする。

  8. currentTargetHiddenSubtreeLevelを0とする。

  9. indexpathサイズ−1とする。

  10. indexが0以上の間、繰り返す:

    1. path[index]のroot-of-closed-treeがtrueなら、 currentTargetHiddenSubtreeLevelを1増やす。

    2. path[index]のinvocation targetcurrentTargetなら、 currentTargetIndexindexに設定し、 breakする。

    3. path[index]のslot-in-closed-treeがtrueなら、 currentTargetHiddenSubtreeLevelを1減らす。

    4. indexを1減らす。

  11. currentHiddenLevelmaxHiddenLevelcurrentTargetHiddenSubtreeLevelとする。

  12. indexcurrentTargetIndex−1に設定する。

  13. indexが0以上の間、繰り返す:

    1. path[index]のroot-of-closed-treeがtrueなら、 currentHiddenLevelを1増やす。

    2. currentHiddenLevelmaxHiddenLevel以下なら、 prependpath[index]のinvocation targetcomposedPathの先頭に追加する。

    3. path[index]のslot-in-closed-treeがtrueなら:

      1. currentHiddenLevelを1減らす。

      2. currentHiddenLevelmaxHiddenLevel未満なら、 maxHiddenLevelcurrentHiddenLevelに設定する。

    4. indexを1減らす。

  14. currentHiddenLevelmaxHiddenLevelcurrentTargetHiddenSubtreeLevelに設定する。

  15. indexcurrentTargetIndex+1に設定する。

  16. indexpathサイズ未満の間、繰り返す:

    1. path[index]のslot-in-closed-treeがtrueなら、 currentHiddenLevelを1増やす。

    2. currentHiddenLevelmaxHiddenLevel以下なら、 appendpath[index]のinvocation targetcomposedPathに追加する。

    3. path[index]のroot-of-closed-treeがtrueなら:

      1. currentHiddenLevelを1減らす。

      2. currentHiddenLevelmaxHiddenLevel未満なら、 maxHiddenLevelcurrentHiddenLevelに設定する。

    4. indexを1増やす。

  17. composedPathを返す。

eventPhase属性は初期化された値を返さなければなりません。値は以下のいずれかです:

NONE(数値値 0)
現在イベント発行されていない場合はこのフェーズです。
CAPTURING_PHASE(数値値 1)
イベント発行され、ツリーに属するオブジェクトの場合、targetに到達する前はこのフェーズになります。
AT_TARGET(数値値 2)
イベント発行されたとき、target上ではこのフェーズになります。
BUBBLING_PHASE(数値値 3)
イベント発行され、ツリーに属するオブジェクトの場合、targetに到達した後はこのフェーズになります。

初期状態では、この属性はNONEで初期化されなければなりません。


イベントには、以下の関連フラグがあり、全て初期状態では未設定です:

stopPropagation()メソッドの手順は、thisstop propagation flagを設定することです。

cancelBubbleゲッターの手順は、thisstop propagation flagが設定されていればtrue、そうでなければfalseを返すことです。

cancelBubbleセッターの手順は、指定された値がtrueならthisstop propagation flagを設定し、そうでなければ何もしないことです。

stopImmediatePropagation()メソッドの手順は、thisstop propagation flagthisstop immediate propagation flagを設定することです。

bubblescancelable属性は、それぞれ初期化された値を返さなければなりません。

canceled flagを設定するには、event eventが、cancelable属性値がtrueであり、かつeventin passive listener flagが未設定なら、eventcanceled flagを設定し、そうでなければ何もしないことです。

returnValueゲッターの手順は、thiscanceled flagが設定されていればfalse、そうでなければtrueを返すことです。

returnValueセッターの手順は、指定された値がfalseならcanceled flagを設定するthisに対して)、そうでなければ何もしないことです。

preventDefault()メソッドの手順は、canceled flagを設定するthisに対して)。

preventDefault()を呼んでも効果がない場合があります。ユーザーエージェントは、開発者コンソールで正確な理由を記録し、デバッグを支援することが推奨されます。

defaultPreventedゲッターの手順は、thiscanceled flagが設定されていればtrue、そうでなければfalseを返すことです。

composedゲッターの手順は、thiscomposed flagが設定されていればtrue、そうでなければfalseを返すことです。


isTrusted属性は初期化された値を返さなければなりません。イベントが作成されたとき、この属性はfalseで初期化されなければなりません。

isTrustedは、イベントがユーザーエージェントによって発行されたか(dispatchEvent()によるものではないか)を示す便宜的なものです。唯一のレガシー例外はclick()で、これによりユーザーエージェントがisTrusted属性がfalseで初期化されたイベントを発行します。

timeStamp属性は初期化された値を返さなければなりません。


initializeするには、eventtypebubblescancelableを使って以下の手順を実行します:

  1. eventinitialized flagを設定する。

  2. eventstop propagation flagstop immediate propagation flagcanceled flagを未設定にする。

  3. eventisTrusted属性をfalseに設定する。

  4. eventtargetをnullに設定する。

  5. eventtype属性をtypeに設定する。

  6. eventbubbles属性をbubblesに設定する。

  7. eventcancelable属性をcancelableに設定する。

initEvent(type, bubbles, cancelable) メソッドの手順は以下の通りです:

  1. thisdispatch flagが設定されていれば、returnする。

  2. initializethistypebubblescancelableで初期化する。

initEvent()イベントのコンストラクタと重複しており、composedを設定できません。レガシーコンテンツのためにサポートが必要です。

2.3. Window インターフェースへのレガシー拡張

partial interface Window {
  [Replaceable] readonly attribute (Event or undefined) event; // legacy
};

Window オブジェクトは、current event(現在のイベント)(undefinedまたはEventオブジェクト)を持ちます。特に記載がない限りundefinedです。

eventゲッターの手順は、thiscurrent eventを返すことです。

Web開発者は、イベントリスナーに渡されるEventオブジェクトを使うことが強く推奨されます。その方が移植性の高いコードになります。この属性はworkersやworkletsでは利用できず、shadow tree内で発行されるイベントには正確ではありません。

2.4. インターフェース CustomEvent

[Exposed=*]
interface CustomEvent : Event {
  constructor(DOMString type, optional CustomEventInit eventInitDict = {});

  readonly attribute any detail;

  undefined initCustomEvent(DOMString type, optional boolean bubbles = false, optional boolean cancelable = false, optional any detail = null); // legacy
};

dictionary CustomEventInit : EventInit {
  any detail = null;
};

イベントCustomEventインターフェースを使うことで、カスタムデータを持たせることができます。

event = new CustomEvent(type [, eventInitDict])
Eventのコンストラクタと同様ですが、eventInitDict引数でdetail属性も設定できます。
event . detail
event作成時に指定した任意のカスタムデータを返します。主に合成イベントで使用されます。

detail属性は初期化された値を返さなければなりません。

initCustomEvent(type, bubbles, cancelable, detail) メソッドの手順は以下の通りです:

  1. thisdispatch flagが設定されていれば、returnする。

  2. initializethistypebubblescancelableで初期化する。

  3. thisdetail属性をdetailに設定する。

2.5. イベントの構築

仕様は、すべてまたは一部のイベントのためのイベント構築手順を定義できます。アルゴリズムには、イベントeventEventIniteventInitDictが、内部イベント生成手順で示された通り渡されます。

この構造は、初期化辞書のメンバーとIDL属性が単純な1:1対応ではない、より複雑な構造を持つEventのサブクラスで利用できます。

Eventインターフェース、またはEventインターフェースを継承したインターフェースのconstructorが呼び出された時、typeeventInitDictを引数として、次の手順を実行します:

  1. eventを、thisインターフェース・null・現在時刻・eventInitDict内部イベント生成手順を実行した結果とする。

  2. eventtype属性をtypeで初期化する。

  3. eventを返す。

イベントを生成するには、eventInterface(必ずEventまたはそれを継承したインターフェース)、任意でrealmrealmを受け取り、以下の手順を実行します:

  1. realmが与えられていなければnullに設定する。

  2. dictionaryを、JavaScriptの値undefinedをeventInterfaceのコンストラクタが受け付ける辞書型に変換した結果とする。(この辞書型はEventInitか、それを継承した辞書型です。)

    メンバーが必須の場合は機能しません。whatwg/dom#600参照。

  3. eventを、eventInterfacerealm・イベントが通知する発生時刻・dictionary内部イベント生成手順を実行した結果とする。

    macOSでは、発生時刻はNSEventオブジェクトのtimestampプロパティで取得できます。

  4. eventisTrusted属性をtrueで初期化する。

  5. eventを返す。

イベントの生成は、他の仕様が単に発火するのではなく、イベントを個別に生成して発行する必要がある場面で利用します。これによりイベント属性が正しい初期値になることを保証します。

内部イベント生成手順は、eventInterfacerealmtimedictionaryを受け、以下の通りです:

  1. eventeventInterfaceを使って新しいオブジェクトとして生成する。realmがnullでなければそれを使い、そうでなければWeb IDLのデフォルト動作を使う。

    Web IDLは現時点でデフォルト動作を定義していません。whatwg/webidl#135参照。

  2. eventinitialized flagを設定する。

  3. eventtimeStamp属性を、相対高精度粗時間timeevent関連グローバルオブジェクトを使う)で初期化する。

  4. dictionarymembervalueで、eventmemberという識別子を持つ属性を持つなら、その属性をvalueで初期化する。

  5. イベント構築手順eventdictionaryで実行する。

  6. eventを返す。

2.6. イベントインターフェースの定義

一般的に、Eventを継承した新しいインターフェースを定義する際は、必ずWHATWGまたはW3C WebApps WGコミュニティに意見を求めてください。

CustomEvent インターフェースを出発点として使用できます。 ただし、init*Event()メソッドはコンストラクタと冗長であるため導入しないでください。Event インターフェースを継承するインターフェースでそのようなメソッドが存在するのは、歴史的な理由によるものだけです。

2.7. インターフェース EventTarget

[Exposed=*]
interface EventTarget {
  constructor();

  undefined addEventListener(DOMString type, EventListener? callback, optional (AddEventListenerOptions or boolean) options = {});
  undefined removeEventListener(DOMString type, EventListener? callback, optional (EventListenerOptions or boolean) options = {});
  boolean dispatchEvent(Event event);
};

callback interface EventListener {
  undefined handleEvent(Event event);
};

dictionary EventListenerOptions {
  boolean capture = false;
};

dictionary AddEventListenerOptions : EventListenerOptions {
  boolean passive;
  boolean once = false;
  AbortSignal signal;
};

EventTarget オブジェクトは、イベント発行されるターゲットを表します。

EventTarget オブジェクトには、関連付けられたイベントリスナーリスト(ゼロ個以上のイベントリスナーリスト)があります。初期状態では空のリストです。

イベントリスナー は、特定のイベントを監視するために使用され、次の要素から構成されます:

callbackEventListener オブジェクトですが、イベントリスナーは、上記のようにより広い概念です。

EventTarget オブジェクトには、関連付けられたget the parentアルゴリズムがあり、イベントeventを受け取り、EventTarget オブジェクトを返します。特に記載がない限り、nullを返します。

ノードシャドウルート、および ドキュメントは、get the parentアルゴリズムをオーバーライドしています。

EventTarget オブジェクトは、関連付けられたactivation behaviorアルゴリズムを持つことができます。この activation behaviorアルゴリズムは、イベントを引数として受け取り、dispatchアルゴリズムで示されています。

これは、特定のEventTarget オブジェクトに対してユーザーエージェントが特定のアクションを実行するために存在します。例えば、 area 要素では、合成されたMouseEvent イベントtype 属性がclickであるもの)に応答します。ウェブ互換性のためこれを削除することはできず、現在では何かをアクティブ化する方法として定義されています。[HTML]

関連付けられたactivation behaviorを持つ各EventTarget オブジェクトは、さらに(どちらか一方ではなく)legacy-pre-activation behaviorアルゴリズムと、 legacy-canceled-activation behavior アルゴリズムを持つことができます。

これらのアルゴリズムは、チェックボックスおよびラジオの input 要素に対してのみ存在し、それ以外の用途では使用しないでください。[HTML]

target = new EventTarget();

新しいEventTarget オブジェクトを作成します。これは、開発者がイベントを発行したり、イベントを監視するために使用できます。

target . addEventListener(type, callback [, options])

イベントtype 属性値がtypeである場合に対応するイベントリスナーを追加します。callback引数は、イベント発行されたときに呼び出されるコールバックを設定します。

options引数はリスナー固有のオプションを設定します。互換性のため、これはブール値である場合もあり、その場合、このメソッドは値がoptionscaptureとして指定されたかのように動作します。

optionscapture がtrueに設定されている場合、イベントeventPhase 属性値がBUBBLING_PHASEのときにコールバックが呼び出されるのを防ぎます。false(または指定されていない場合)では、イベントeventPhase 属性値がCAPTURING_PHASEのときに呼び出されません。いずれの場合も、イベントeventPhase 属性値がAT_TARGETの場合はコールバックが呼び出されます。

optionspassive がtrueに設定されている場合、コールバックpreventDefault() を呼び出してイベントをキャンセルしないことを示します。これは、§ 2.8 Observing event listenersで説明されるパフォーマンス最適化を有効にするために使用されます。

optionsonce がtrueに設定されている場合、コールバックは一度だけ呼び出され、その後イベントリスナーが削除されます。

もしoptionssignalとしてAbortSignalが渡された場合、シグナルが中止されたときにイベントリスナーが削除されます。

イベントリスナーtargetイベントリスナーリストに追加されますが、同じtypecallback、およびcaptureを持つリスナーがすでに存在する場合は追加されません。

target . removeEventListener(type, callback [, options])

targetイベントリスナーリストにある、同じtypecallback、および optionsを持つイベントリスナーを削除します。

target . dispatchEvent(event)

targetに対して合成されたevent発行し、eventcancelable 属性値がfalseであるか、preventDefault() メソッドが呼び出されていない場合はtrueを返します。それ以外の場合はfalseを返します。

flattenoptionsを処理するには、次の手順を実行します:

  1. optionsがブール値の場合、optionsを返す。

  2. options["capture"]を返す。

flatten moreoptionsを処理するには、次の手順を実行します:

  1. captureを、flattening optionsの結果に設定する。

  2. onceをfalseに設定する。

  3. passivesignalをnullに設定する。

  4. options辞書である場合:

    1. onceoptions["once"]に設定する。

    2. options["passive"] が存在する場合passiveoptions["passive"]に設定する。

    3. options["signal"] が存在する場合signaloptions["signal"]に設定する。

  5. capturepassiveoncesignalを返す。

new EventTarget() コンストラクタ手順は何も行いません。

他の箇所で規定されたデフォルトのため、返されるEventTargetget the parentアルゴリズムはnullを返し、 activation behaviorlegacy-pre-activation behavior、 またはlegacy-canceled-activation behaviorを持ちません。

将来的にはカスタムget the parentアルゴリズムを許可する可能性があります。これがプログラムで有用である場合はお知らせください。 現時点では、作成されたすべてのEventTargetは ツリー構造に参加しません。

デフォルトのパッシブ値は、イベントタイプtypeEventTarget eventTargetを受け取り、以下のように決定されます:

  1. 以下のすべてが真である場合、trueを返す:

  2. falseを返す。

イベントリスナーを追加するには、EventTarget オブジェクトeventTargetイベントリスナーlistenerを受け取り、以下の手順を実行します:

  1. eventTargetServiceWorkerGlobalScope オブジェクトであり、そのサービスワーカースクリプトリソース評価済みフラグが設定されており、listenertypeが、いずれかのサービスワーカーイベントtype属性値に一致する場合、この結果が予期したものと異なる可能性があるとコンソールに警告を報告します。[SERVICE-WORKERS]

  2. listenersignalがnullでなく、かつ中止されている場合、終了する。

  3. listenercallbackがnullである場合、終了する。

  4. listenerpassiveがnullである場合、listenertypeeventTargetを用いてデフォルトのパッシブ値に設定する。

  5. eventTargetイベントリスナーリストに、含まれていない場合、そのtypelistenertypeであり、callbacklistenercallbackであり、capturelistenercaptureであるイベントリスナーがある場合、追加する。

  6. listenersignalがnullでない場合、次の中止手順を追加する:

    1. イベントリスナーを削除する、対象はeventTargetlistener

イベントリスナーを追加するの概念は、イベントハンドラーが同じコードパスを使用することを保証するために存在します。[HTML]

addEventListener(type, callback, options) メソッドの手順は以下の通りです:

  1. capturepassiveonce、およびsignalを、flattening more optionsの結果に設定する。

  2. イベントリスナーを追加する、対象はthisイベントリスナーであり、そのtypetypecallbackcallbackcapturecapturepassivepassiveonceonce、およびsignalsignalである。

イベントリスナーを削除するには、EventTarget オブジェクトeventTargetイベントリスナーlistenerを受け取り、以下の手順を実行します:

  1. eventTargetServiceWorkerGlobalScope オブジェクトであり、そのサービスワーカー処理するイベントタイプのセットlistenertype含む場合、コンソールに警告を報告する。[SERVICE-WORKERS]

  2. listenerremovedをtrueに設定し、eventTargetイベントリスナーリストから削除する。

HTMLではこれを使用してイベントハンドラーを定義します。[HTML]

すべてのイベントリスナーを削除するには、EventTarget オブジェクトeventTargetを受け取り、eventTargetイベントリスナーリストlistenerに対して、イベントリスナーを削除するを実行する。

HTMLではこれを使用してdocument.open()を定義します。[HTML]

removeEventListener(type, callback, options) メソッドの手順は以下の通りです:

  1. captureを、flattening optionsの結果に設定する。

  2. thisイベントリスナーリストに、含まれるtypetypeであり、callbackcallbackであり、capturecaptureであるイベントリスナーがある場合、イベントリスナーを削除する、対象はthisとそのイベントリスナー。

イベントリスナーリストには、同じtypecallback、およびcaptureを持つ複数のイベントリスナーが含まれないため、イベントリスナーを追加するがこれを防ぎます。

dispatchEvent(event) メソッドの手順は以下の通りです:

  1. eventdispatch flagが設定されている場合、またはそのinitialized flagが設定されていない場合、例外を投げる "InvalidStateError" DOMException

  2. eventisTrusted 属性をfalseに初期化する。

  3. dispatchingeventthisを用いて実行した結果を返す。

2.8. イベントリスナーの観察

一般的に、開発者はイベントリスナーの存在が観察可能であることを期待していません。 イベントリスナーの影響は、そのコールバックによって決定されます。つまり、 開発者が何もしないイベントリスナーを追加しても、副作用がないことを期待します。

しかしながら、一部のイベントAPIは効率的に実装するために イベントリスナーを観察する必要があるように設計されています。これにより、リスナーの存在が観察可能になり、 空のリスナーであってもアプリケーションの動作やパフォーマンスに大きな影響を与える可能性があります。 例えば、非同期スクロールをブロックするために使用されるタッチイベントやホイールイベントのような場合です。 この問題は、少なくとも1つの非passiveリスナーが存在する場合にのみ イベントをcancelableとして指定することで、軽減されることがあります。 例えば、非passive TouchEvent リスナーはスクロールをブロックする必要がありますが、すべてのリスナーがpassive である場合、並行してスクロールを開始できるよう、TouchEvent をキャンセル不可(preventDefault() の呼び出しを無視する)にすることができます。そのため、イベントを発行するコードは非passiveリスナーの有無を観察し、 発行されるイベントのcancelableプロパティをクリアすることができます。

理想的には、新しいイベントAPIはこの特性を必要としないように定義されるべきです。(議論についてはwhatwg/domを使用してください。)

レガシーなサービスワーカーのfetchイベントリスナーコールバックを取得するには、 ServiceWorkerGlobalScope globalを受け取り、以下の手順を実行します。これにより、リストとして EventListener オブジェクトが返されます。

  1. callbacksを« »に設定する。

  2. globalイベントリスナーリストlistenerについて:

    1. もしlistenertypeが"fetch"であり、 listenercallbackがnullでない場合、 appendを使ってlistenercallbackcallbacksに追加する。

  3. callbacksを返す。

2.9. イベントのディスパッチ

dispatch を使って eventtarget に、オプションの legacy target override flag およびオプションの legacyOutputDidListenersThrowFlag とともにディスパッチするには、以下の手順を実行する:

  1. eventdispatch flag を設定する。

  2. targetOverridetarget に設定する。ただし legacy target override flag が指定されていない場合は target関連付けられた Document に設定する。 [HTML]

    legacy target override flag は HTML でのみ使用され、targetWindow オブジェクトの場合のみ使用される。

  3. activationTarget を null に設定する。

  4. relatedTargetretargeting により eventrelatedTargettarget に対して再ターゲットした結果に設定する。

  5. clearTargets を false に設定する。

  6. targetrelatedTarget でない、または targeteventrelatedTarget である場合:

    1. touchTargets を新しい リスト に設定する。

    2. touchTargeteventtouch target list から取り出し、retargeting により touchTargettarget に対して再ターゲットした結果を touchTargets追加する。

    3. イベントパスに追加event, target, targetOverride, relatedTarget, touchTargets, false で実行する。

    4. isActivationEvent を true に設定する。ただし eventMouseEvent オブジェクトであり、eventtype 属性が "click" の場合のみ。そうでなければ false。

    5. isActivationEvent が true かつ targetactivation behavior を持つ場合、activationTargettarget に設定する。

    6. slottabletarget に設定する。ただし targetslottable かつ assigned の場合のみ。そうでなければ null。

    7. slot-in-closed-tree を false に設定する。

    8. parenttargetget the parentevent で呼び出した結果に設定する。

    9. parent が null でない間:

      1. slottable が null でない場合:

        1. アサート:parentslot である。

        2. slottable を null に設定する。

        3. parentrootshadow root かつ mode が "closed" の場合、slot-in-closed-tree を true に設定する。

      2. parentslottable かつ assigned の場合、slottableparent に設定する。

      3. relatedTargetretargeting により eventrelatedTargetparent に対して再ターゲットした結果に設定する。

      4. touchTargets を新しい リスト に設定する。

      5. touchTargeteventtouch target list から取り出し、追加する。retargeting により touchTargetparent に対して再ターゲットした結果を touchTargets に追加する。

      6. parentWindow オブジェクト、または parentnode かつ targetrootshadow-including inclusive ancestor である場合:

        1. isActivationEvent が true、eventbubbles 属性が true、activationTarget が null、かつ parentactivation behavior を持つ場合、activationTargetparent に設定する。

        2. イベントパスに追加event, parent, null, relatedTarget, touchTargets, slot-in-closed-tree で実行する。

      7. それ以外の場合、parentrelatedTarget であれば、parent を null に設定する。

      8. それ以外の場合:

        1. targetparent に設定する。

        2. isActivationEvent が true、activationTarget が null、かつ targetactivation behavior を持つ場合、activationTargettarget に設定する。

        3. イベントパスに追加event, parent, target, relatedTarget, touchTargets, slot-in-closed-tree で実行する。

      9. parent が null でない場合、parentparentget the parentevent で呼び出した結果に設定する。

      10. slot-in-closed-tree を false に設定する。

    10. clearTargetsStructeventpath のうち、shadow-adjusted target が null でない最後の構造体に設定する。

    11. clearTargetsStructshadow-adjusted targetclearTargetsStructrelatedTarget、または clearTargetsStructtouch target list 内の EventTarget オブジェクトが node であり、その rootshadow root である場合、clearTargets を true に設定する。

    12. activationTarget が null でなく、activationTargetlegacy-pre-activation behavior を持つ場合、activationTargetlegacy-pre-activation behavior を実行する。

    13. structeventpath の逆順で取り出す:

      1. structshadow-adjusted target が null でない場合、eventeventPhase 属性を AT_TARGET に設定する。

      2. それ以外の場合、eventeventPhase 属性を CAPTURING_PHASE に設定する。

      3. Invokestruct, event, "capturing", legacyOutputDidListenersThrowFlag(指定されていれば)で実行する。

    14. structeventpath から取り出す:

      1. structshadow-adjusted target が null でない場合、eventeventPhase 属性を AT_TARGET に設定する。

      2. それ以外の場合:

        1. eventbubbles 属性が false であれば、continue する。

        2. eventeventPhase 属性を BUBBLING_PHASE に設定する。

      3. Invokestruct, event, "bubbling", legacyOutputDidListenersThrowFlag(指定されていれば)で実行する。

  7. eventeventPhase 属性を NONE に設定する。

  8. eventcurrentTarget 属性を null に設定する。

  9. eventpath を空のリストに設定する。

  10. eventdispatch flagstop propagation flagstop immediate propagation flag を解除する。

  11. clearTargets が true の場合:

    1. eventtarget を null に設定する。

    2. eventrelatedTarget を null に設定する。

    3. eventtouch target list を空のリストに設定する。

  12. activationTarget が null でない場合:

    1. eventcanceled flag が解除されていれば、activationTargetactivation behaviorevent で実行する。

    2. それ以外の場合、activationTargetlegacy-canceled-activation behavior を持つ場合、activationTargetlegacy-canceled-activation behavior を実行する。

  13. eventcanceled flag が設定されていれば false を返す。そうでなければ true を返す。

イベントパスに追加するには、eventinvocationTargetshadowAdjustedTargetrelatedTargettouchTargets、および slot-in-closed-tree が与えられたとき、以下の手順を実行する:

  1. invocationTargetInShadowTree を false に設定する。

  2. もし invocationTargetノードであり、その ルートシャドウルート であるなら、invocationTargetInShadowTree を true に設定する。

  3. root-of-closed-tree を false に設定する。

  4. もし invocationTargetシャドウルートであり、その mode が "closed" であるなら、root-of-closed-tree を true に設定する。

  5. Append を使って新しい structeventpath に追加する。invocation targetinvocationTargetinvocation-target-in-shadow-treeinvocationTargetInShadowTreeshadow-adjusted targetshadowAdjustedTargetrelatedTargetrelatedTargettouch target listtouchTargetsroot-of-closed-treeroot-of-closed-treeslot-in-closed-treeslot-in-closed-tree

invokeするには、structeventphase、およびオプションの legacyOutputDidListenersThrowFlag が与えられたとき、以下の手順を実行する:

  1. eventtargeteventshadow-adjusted targetstructまたはそれ以前のstructのうち、shadow-adjusted target が null でない最後のもの)に設定する。

  2. eventrelatedTargetstructrelatedTarget に設定する。

  3. eventtouch target liststructtouch target list に設定する。

  4. eventstop propagation flag が設定されていれば、return する。

  5. eventcurrentTarget 属性を structinvocation target に初期化する。

  6. listenersclone した eventcurrentTarget 属性値の event listener list に設定する。

    これは、この時点以降に追加された event listener が実行されないようにするためである。削除は removed フィールドにより影響を受けることに注意。

  7. invocationTargetInShadowTreestructinvocation-target-in-shadow-tree に設定する。

  8. foundinner invokeeventlistenersphaseinvocationTargetInShadowTree、および legacyOutputDidListenersThrowFlag(指定されていれば)で実行した結果に設定する。

  9. found が false かつ eventisTrusted 属性が true の場合:

    1. originalEventTypeeventtype 属性値に設定する。

    2. eventtype 属性値が下記の表の第1列のいずれかの文字列と一致する場合、eventtype 属性値を同じ行の第2列の文字列に設定し、そうでなければ return する。

      イベントタイプ レガシーイベントタイプ
      "animationend" "webkitAnimationEnd"
      "animationiteration" "webkitAnimationIteration"
      "animationstart" "webkitAnimationStart"
      "transitionend" "webkitTransitionEnd"
    3. inner invokeeventlistenersphaseinvocationTargetInShadowTree、および legacyOutputDidListenersThrowFlag(指定されていれば)で実行する。

    4. eventtype 属性値を originalEventType に設定する。

inner invokeするには、eventlistenersphaseinvocationTargetInShadowTree、およびオプションの legacyOutputDidListenersThrowFlag が与えられたとき、以下の手順を実行する:

  1. found を false に設定する。

  2. listenerlisteners から取り出し、removed が false の場合:

    1. eventtype 属性値が listenertype と一致しない場合、continue する。

    2. found を true に設定する。

    3. phase が "capturing" かつ listenercapture が false の場合、continue する。

    4. phase が "bubbling" かつ listenercapture が true の場合、continue する。

    5. listeneronce が true の場合、remove an event listenereventcurrentTarget 属性値と listener で実行する。

    6. globallistenercallbackassociated realmglobal object に設定する。

    7. currentEvent を undefined に設定する。

    8. globalWindow オブジェクトの場合:

      1. currentEventglobalcurrent event に設定する。

      2. invocationTargetInShadowTree が false の場合、globalcurrent eventevent に設定する。

    9. listenerpassive が true の場合、eventin passive listener flag を設定する。

    10. globalWindow オブジェクトの場合、record timing info for event listenereventlistener で実行する。

    11. Call a user object’s operationlistenercallback、"handleEvent"、« event »、eventcurrentTarget 属性値で実行する。これが例外 exception を投げた場合:

      1. Report exceptionlistenercallback の対応する JavaScript オブジェクトの associated realmglobal object で報告する。

      2. legacyOutputDidListenersThrowFlag が指定されていれば設定する。

        legacyOutputDidListenersThrowFlag は Indexed Database API でのみ使用される。[INDEXEDDB]

    12. eventin passive listener flag を解除する。

    13. globalWindow オブジェクトの場合、globalcurrent eventcurrentEvent に設定する。

    14. eventstop immediate propagation flag が設定されていれば、break する。

  3. found を返す。

2.10. イベントの発火

fire an event を使って、e という名前のイベントを target で発火し、オプションで eventConstructor を使用し、IDL属性の初期化方法の説明と legacy target override flag を指定して、以下の手順を実行する:

  1. eventConstructor が指定されていなければ、eventConstructorEvent に設定する。

  2. eventcreating an eventeventConstructortargetrelevant realm で実行した結果に設定する。

  3. eventtype 属性を e に初期化する。

  4. その他の event の IDL 属性を、このアルゴリズムの呼び出し時の説明に従って初期化する。

    これにより isTrusted 属性を false に設定することもできる。

  5. dispatching を使って eventtarget で発火し、legacy target override flag が設定されていればそれを使い、その結果を返す。

DOM における fire は、creating、初期化、および dispatching をまとめて event に対して行うことを意味する。 fire an event はこの処理を簡潔に記述できるようにしている。

eventbubblescancelable 属性を初期化する必要がある場合は、"fire an event named submit at target with its cancelable attribute initialized to true" のように記述できる。

また、カスタムコンストラクタが必要な場合は、"fire an event named click at target using MouseEvent with its detail attribute initialized to 1" のように記述できる。

時には戻り値が重要になることもある:

  1. doActionfiring an event named like at target の結果に設定する。

  2. doAction が true なら …

2.11. アクションと発生の違い

event は「発生」を意味し、「アクション」ではない。言い換えると、アルゴリズムからの通知を表し、そのアルゴリズムの今後の進行に影響を与えるために使うことができる(例:preventDefault() の呼び出しなど)。 Events はアクションや何かのアルゴリズムを開始するためのものではない。それが目的ではない。

ここで特に説明する理由は、以前の DOM 仕様では events に「デフォルトアクション」という概念があり、誤解を招いていたためである。 Events はアクションを表したり引き起こしたりするものではなく、進行中のアクションにのみ影響を与えることができる。

3. 進行中のアクティビティの中断

Promise には組み込みの中断メカニズムはありませんが、多くの API では中断のセマンティクスが必要です。AbortController は、対応する AbortSignal オブジェクトの状態を切り替える abort() メソッドを提供することで、これらの要件をサポートすることを目的としています。 中断をサポートしたい API は AbortSignal オブジェクトを受け取り、その状態に応じて処理を決定できます。

AbortController を利用する API は、abort() に応答して、未解決の Promise を AbortSignalabort reason で reject することが推奨されます。

仮想の doAmazingness({ ... }) メソッドは、以下のように AbortSignal オブジェクトを受け取って中断をサポートできます:

const controller = new AbortController();
const signal = controller.signal;

startSpinner();

doAmazingness({ ..., signal })
    .then(result => ...)
    .catch(err => {
    if (err.name == 'AbortError') return;
    showUserErrorMessage();
    })
    .then(() => stopSpinner());

// …

controller.abort();

doAmazingness は次のように実装できます:

function doAmazingness({signal}) {
    return new Promise((resolve, reject) => {
    signal.throwIfAborted();

    // 素晴らしい処理を開始し、完了時に resolve(result) を呼び出す。
    // また、シグナルも監視する:
    signal.addEventListener('abort', () => {
        // 素晴らしい処理を停止し、
        reject(signal.reason);
    });
    });
}

Promise を返さない API は、同等の方法で反応するか、AbortSignalabort reason を全く表に出さないこともできます。addEventListener() は後者が適切だった API の例です。

より細かな制御が必要な API は、AbortControllerAbortSignal オブジェクトを必要に応じて拡張できます。

3.1. インターフェース AbortController

[Exposed=*]
interface AbortController {
    constructor();

    [SameObject] readonly attribute AbortSignal signal;

    undefined abort(optional any reason);
};
controller = new AbortController()
新しい controller を返し、その signal は新しく作成された AbortSignal オブジェクトに設定される。
controller . signal
このオブジェクトに関連付けられた AbortSignal オブジェクトを返す。
controller . abort(reason)
このメソッドを呼び出すと、reason がこのオブジェクトの AbortSignalabort reason に保存され、関連するアクティビティが中断されることを監視者に通知する。reason が undefined の場合は "AbortError" DOMException が保存される。

AbortController オブジェクトには、関連付けられた signalAbortSignal オブジェクト)がある。

new AbortController() コンストラクタの手順:

  1. signal を新しい AbortSignal オブジェクトに設定する。

  2. thissignalsignal に設定する。

signal getter の手順は、thissignal を返すこと。

abort(reason) メソッドの手順は、reason が指定されていれば signal abortthisreason とともに実行すること。

signal abortAbortController controller で、オプションの reason とともに実行するには、controllersignalreason とともに signal abort を実行すること。

3.2. インターフェース AbortSignal

[Exposed=*]
interface AbortSignal : EventTarget {
  [NewObject] static AbortSignal abort(optional any reason);
  [Exposed=(Window,Worker), NewObject] static AbortSignal timeout([EnforceRange] unsigned long long milliseconds);
  [NewObject] static AbortSignal _any(sequence<AbortSignal> signals);

  readonly attribute boolean aborted;
  readonly attribute any reason;
  undefined throwIfAborted();

  attribute EventHandler onabort;
};
AbortSignal . abort(reason)
AbortSignal インスタンスを返し、その 中断理由は、reason が undefined でない場合は reason に、そうでない場合は "AbortError" DOMException に設定される。
AbortSignal . any(signals)
AbortSignal インスタンスを返し、signals のいずれかが中断されると自身も中断される。その 中断理由は、中断を引き起こした signals のいずれかの理由に設定される。
AbortSignal . timeout(milliseconds)
AbortSignal インスタンスを返し、milliseconds ミリ秒後に中断される。その 中断理由は、"TimeoutError" DOMException に設定される。
signal . aborted
signalAbortController が中断を通知した場合は true を、そうでない場合は false を返す。
signal . reason
signal中断理由を返す。
signal . throwIfAborted()
signalAbortController が中断を通知した場合、signal中断理由をスローする。そうでない場合は何もしない。

AbortSignal オブジェクトには、関連付けられた 中断理由(JavaScript の値)があり、初期値は undefined である。

AbortSignal オブジェクトには、関連付けられた 中断アルゴリズム中断されたときに実行されるアルゴリズムの セット)があり、初期状態は空である。

中断アルゴリズムは、複雑な要件を持つ API が abort() に合理的な方法で反応できるようにする。たとえば、特定の API の 中断理由は、サービスワーカーなどのスレッド間の環境に伝播する必要がある場合がある。

AbortSignal オブジェクトには dependent(ブール値)があり、初期値は false である。

AbortSignal オブジェクトには、関連付けられた source signals(オブジェクトがその 中断された状態に依存する AbortSignal オブジェクトの弱い セット)があり、初期状態は空である。

AbortSignal オブジェクトには、関連付けられた dependent signals(オブジェクトにその 中断された状態を依存する AbortSignal オブジェクトの弱い セット)があり、初期状態は空である。


静的な abort(reason) メソッドのステップは次のとおりである:

  1. signal を新しい AbortSignal オブジェクトにする。

  2. signal中断理由を、reason が指定されている場合は reason に、そうでない場合は新しい "AbortError" DOMException に設定する。

  3. signal を返す。

静的な timeout(milliseconds) メソッドのステップは次のとおりである:

  1. signal を新しい AbortSignal オブジェクトにする。

  2. globalsignal関連するグローバルオブジェクトにする。

  3. タイムアウト後にステップを実行するを、global、"AbortSignal-timeout"、milliseconds、および次のステップで実行する:

    1. グローバルタスクをキューに入れるを、タイマータスクソース上で global を指定して、signal と新しい "TimeoutError" DOMException を指定して 中断を通知する

    このタイムアウトの間、signalabort イベントにイベントリスナーが登録されている場合、global から signal への強い参照がなければならない。

  4. signal を返す。

静的な any(signals) メソッドのステップは、signals から AbortSignal現在のレルムを使用して 依存する中断シグナルを作成する結果を返すことである。

aborted ゲッターのステップは、this中断されている場合は true を、そうでない場合は false を返すことである。

reason ゲッターのステップは、this中断理由を返すことである。

throwIfAborted() メソッドのステップは、this中断されている場合、this中断理由をスローすることである。

このメソッドは主に、AbortSignal を受け入れる関数が、AbortSignal を他のメソッドに渡す代わりに、特定のチェックポイントでスロー(または拒否された Promise を返す)したい場合に便利である。たとえば、次の関数は、条件をポーリングする各試行の間に中断を許可する。これにより、実際の非同期操作(つまり、await func())が AbortSignal を受け入れなくても、ポーリングプロセスを中断する機会が与えられる。

async function waitForCondition(func, targetValue, { signal } = {}) {
          while (true) {
            signal?.throwIfAborted();
        
            const result = await func();
            if (result === targetValue) {
              return;
            }
          }
        }
        

onabort 属性は、onabort イベントハンドラーイベントハンドラー IDL 属性であり、その イベントハンドラーイベントタイプabort である。

AbortSignal オブジェクトへの変更は、対応する AbortController オブジェクトの意図を表すが、AbortSignal オブジェクトを監視する API は、それらを無視することを選択できる。たとえば、操作がすでに完了している場合などである。


AbortSignal オブジェクトは、その 中断理由が undefined でない場合に 中断される

アルゴリズム algorithmAbortSignal オブジェクト signal追加するには:

  1. signal中断されている場合、return する。

  2. algorithmsignal中断アルゴリズム追加する

アルゴリズム algorithmAbortSignal signal から 削除するには、algorithmsignal中断アルゴリズムから 削除する

AbortSignal オブジェクト signal とオプションの reason を指定して 中断を通知するには:

  1. signal中断されている場合、return する。

  2. signal中断理由を、reason が指定されている場合は reason に、そうでない場合は新しい "AbortError" DOMException に設定する。

  3. dependentSignalsToAbort を新しい リストにする。

  4. signal依存シグナルの各 dependentSignal について 繰り返す

    1. dependentSignal中断されていない場合:

      1. dependentSignal中断理由signal中断理由に設定する。

      2. dependentSignaldependentSignalsToAbort追加する

  5. signal中断ステップを実行する

  6. dependentSignalsToAbort の各 dependentSignal について、繰り返しdependentSignal中断ステップを実行する

AbortSignal signal中断ステップを実行するには:

  1. signal中断アルゴリズムの各 algorithm について 繰り返すalgorithm を実行する。

  2. signal中断アルゴリズム空にする

  3. abort という名前の イベントを signal で発火する

AbortSignal オブジェクトのリスト signals から、signalInterfaceAbortSignal またはそれを継承するインターフェースでなければならない)と realm を使用して、依存する中断シグナルを作成するには:

  1. resultSignal を、realm を使用して signalInterface を実装する 新しいオブジェクトにする。

  2. signals の各 signal について 繰り返すsignal中断されている場合、resultSignal中断理由signal中断理由に設定し、resultSignal を返す。

  3. resultSignaldependent を true に設定する。

  4. signals の各 signal について 繰り返す

    1. signaldependent が false の場合:

      1. signalresultSignalsource signals追加する

      2. resultSignalsignaldependent signals追加する

    2. そうでない場合、signalsource signals の各 sourceSignal について 繰り返す

      1. 表明:sourceSignal中断されておらずdependent ではない。

      2. sourceSignalresultSignalsource signals追加する

      3. resultSignalsourceSignaldependent signals追加する

  5. resultSignal を返す。

3.2.1. ガベージコレクション

中断されていない dependentAbortSignal オブジェクトは、その source signals が空でなく、abort イベントに登録されたイベントリスナーがあるか、その 中断アルゴリズムが空でない間は、ガベージコレクションされてはならない。

3.3. API での AbortControllerAbortSignal オブジェクトの使用

中断可能な操作を表すために Promise を使用するウェブプラットフォーム API は、次に従わなければならない:

Promise を返すメソッド doAmazingness(options) のメソッドステップは次のようになる:

  1. globalthis関連するグローバルオブジェクトにする。

  2. p新しい Promise にする。

  3. options["signal"] が 存在する場合:

    1. signaloptions["signal"] にする。

    2. signal中断されている場合、signal中断理由p拒否しp を返す。

    3. 次の中断ステップを signal追加する

      1. 素晴らしいことをするのを停止する。

      2. signal中断理由p拒否する

  4. 次のステップを 並行して実行する:

    1. amazingResult を素晴らしいことをした結果にする。

    2. global を指定してアメージングタスクソース上で グローバルタスクをキューに入れamazingResultp解決する

  5. p を返す。

Promise を使用しない API も、可能な限り上記に従うべきである。

4. ノード

4.1. "The DOM" の概要

本来の意味において、"The DOM" は文書(特に HTML と XML 文書)にアクセスし操作するための API である。この仕様では、「文書」という用語は、短い静的文書から、リッチメディアを含む長いエッセイや報告書、さらには本格的なインタラクティブアプリケーションまで、あらゆるマークアップベースのリソースに使用される。

このような各文書は ノードツリーとして表される。ツリー内の ノードの一部は を持つことができるが、他は常にリーフである。

例として、この HTML 文書を考えてみる:

<!DOCTYPE html>
<html class=e>
    <head><title>Aliens?</title></head>
    <body>Why yes.</body>
</html>

これは次のように表される:

HTML パースの魔法により、すべての ASCII 空白文字Text ノードに変換されるわけではないが、一般的な概念は明確である。マークアップが入力され、ノードツリーが出力される。

優れた Live DOM Viewer を使用して、この件についてより詳細に調べることができる。

4.2. ノードツリー

ノードNode実装するオブジェクトである。 ノードツリー参加し、そのツリーは ノードツリーとして知られている。

実際には、より具体的なオブジェクトを扱う。

Node実装するオブジェクトは、継承されたインターフェースも実装する:DocumentDocumentTypeDocumentFragmentElementCharacterData、 または Attr

DocumentFragment を実装するオブジェクトは、時には ShadowRoot も実装する。

Element を実装するオブジェクトは、通常、HTMLAnchorElement などの継承されたインターフェースも実装する。

CharacterData を実装するオブジェクトは、継承されたインターフェースも実装する:TextProcessingInstruction、 または Comment

Text を実装するオブジェクトは、時には CDATASection も実装する。

したがって、すべてのノードプライマリインターフェースは次のいずれかである:DocumentDocumentTypeDocumentFragmentShadowRootElement または Element の継承されたインターフェース、 AttrTextCDATASectionProcessingInstruction、 または Comment

簡潔にするため、この仕様では Node と継承されたインターフェース NodeInterface実装するオブジェクトを、 NodeInterface ノードと呼ぶ。

ノードツリーは次のように制約される。これは ノードとその潜在的なの関係として表現される:

Document

ツリー順で:

  1. 0個以上の ProcessingInstruction または Comment ノード

  2. オプションで1つの DocumentType ノード

  3. 0個以上の ProcessingInstruction または Comment ノード

  4. オプションで1つの Element ノード

  5. 0個以上の ProcessingInstruction または Comment ノード

DocumentFragment
Element

0個以上の Element または CharacterData ノード

DocumentType
CharacterData
Attr

なし。

Attr ノードは歴史的な理由によりツリー参加するが、決して(非null の)を持たず、したがってツリー内で単独である。

ノード node長さを決定するには、次のステップを実行する:

  1. nodeDocumentType または Attr ノードの場合、0 を返す。

  2. nodeCharacterData ノードの場合、nodeデータ長さを返す。

  3. nodeの数を返す。

ノードは、その 長さが 0 の場合、であると見なされる。

4.2.1. 文書ツリー

文書ツリールート文書であるノードツリーである。

文書文書要素は、 そのがその文書である要素(存在する場合)、そうでない場合は null である。

ノードツリーの制約により、そのような要素は1つしか存在できない。

ノードは、そのルート文書の場合、文書ツリー内にある

ノードは、文書ツリー内にある場合、文書内にある文書内にあるという用語は、もはや使用されるべきではない。それを使用する標準がシャドウツリーを考慮するために更新されていないことを示している。

4.2.2. シャドウツリー

シャドウツリールートシャドウルートであるノードツリーである。

シャドウルートは、その ホストを通じて、常に別のノードツリーに接続されている。したがってシャドウツリーは決して単独ではない。 シャドウルートホストノードツリーは、時にライトツリーと呼ばれる。

シャドウツリーに対応するライトツリーは、それ自体がシャドウツリーである場合もある。

ノードは、その シャドウを含むルート文書の場合、接続されている

4.2.2.1. スロット

シャドウツリーは、 スロットである0個以上の要素を含む。

スロットは、HTML の slot 要素を通じてのみ作成できる。

スロットには関連付けられた名前(文字列)がある。特に明記されていない限り、それは空文字列である。

スロット名前を更新するには、次の属性変更ステップを使用する:

  1. elementスロットで、localNamename で、 namespace が null の場合:

    1. valueoldValue の場合、return する。

    2. value が null で oldValue が空文字列の場合、return する。

    3. value が空文字列で oldValue が null の場合、return する。

    4. value が null または空文字列の場合、element名前を空文字列に設定する。

    5. そうでない場合、element名前value に設定する。

    6. elementルートを指定してツリーのスロット可能要素を割り当てるを実行する。

シャドウツリー内の、ツリー順で最初のスロットで、その 名前が空文字列であるものは、時に「デフォルトスロット」として知られる。

スロットには関連付けられた割り当てられたノードスロット可能要素のリスト)がある。特に明記されていない限り、それは空である。

4.2.2.2. スロット可能要素

ElementText ノードスロット可能要素である。

スロットスロット可能要素になることができる。

スロット可能要素には関連付けられた名前(文字列)がある。特に明記されていない限り、それは空文字列である。

スロット可能要素名前を更新するには、次の属性変更ステップを使用する:

  1. localNameslotnamespace が null の場合:

    1. valueoldValue の場合、return する。

    2. value が null で oldValue が空文字列の場合、return する。

    3. value が空文字列で oldValue が null の場合、return する。

    4. value が null または空文字列の場合、element名前を空文字列に設定する。

    5. そうでない場合、element名前value に設定する。

    6. element割り当てられている場合、element割り当てられたスロットに対してスロット可能要素を割り当てるを実行する。

    7. element に対してスロットを割り当てるを実行する。

スロット可能要素には関連付けられた 割り当てられたスロット(null またはスロット)がある。 特に明記されていない限り、それは null である。スロット可能要素は、その割り当てられたスロットが非 null の場合、 割り当てられている

スロット可能要素には関連付けられた手動スロット割り当て(null またはスロット)がある。特に明記されていない限り、それは null である。

スロット可能要素手動スロット割り当ては、この変数がスクリプトから直接アクセスできないため、スロットへの弱参照を使用して実装できる。

4.2.2.3. スロットとスロット可能要素の検索

指定されたスロット可能要素 slottable とオプションのブール値 open(デフォルトは false)に対してスロットを見つけるには:

  1. slottableが null の場合、null を返す。

  2. shadowslottableシャドウルートにする。

  3. shadow が null の場合、null を返す。

  4. open が true で shadowモードが "open" でない場合、null を返す。

  5. shadowスロット割り当てが "manual" の場合、shadow子孫の中で、その 手動で割り当てられたノードslottable含むスロットがあればそれを返し、そうでない場合は null を返す。

  6. shadow子孫内でツリー順で最初のスロットで、その名前slottable名前と一致するものがあればそれを返し、そうでない場合は null を返す。

指定されたスロット slot に対してスロット可能要素を見つけるには:

  1. result を « » にする。

  2. rootslotルートにする。

  3. rootシャドウルートでない場合、result を返す。

  4. hostrootホストにする。

  5. rootスロット割り当てが "manual" の場合:

    1. slot手動で割り当てられたノードの各スロット可能要素 slottable について繰り返しslottablehost の場合、slottableresult追加する

  6. そうでない場合、host の各スロット可能要素 slottable について、ツリー順で:

    1. foundSlotslottable を指定してスロットを見つけた結果にする。

    2. foundSlotslot の場合、slottableresult追加する

  7. result を返す。

指定されたスロット slot に対して平坦化されたスロット可能要素を見つけるには:

  1. result を « » にする。

  2. slotルートシャドウルートでない場合、result を返す。

  3. slottablesslot を指定してスロット可能要素を見つけた結果にする。

  4. slottables が空のリストの場合、slot の各スロット可能要素ツリー順slottables に追加する。

  5. slottables の各 node について:

    1. nodeルートシャドウルートスロットの場合:

      1. temporaryResultnode を指定して平坦化されたスロット可能要素を見つけた結果にする。

      2. temporaryResult の各スロット可能要素を順番に result に追加する。

    2. そうでない場合、noderesult に追加する。

  6. result を返す。

4.2.2.4. スロット可能要素とスロットの割り当て

スロット slot に対してスロット可能要素を割り当てるには:

  1. slottablesslot に対してスロット可能要素を見つけた結果にする。

  2. slottablesslot割り当てられたノードが同一でない場合、slot に対してスロット変更をシグナルするを実行する。

  3. slot割り当てられたノードslottables に設定する。

  4. slottables の各 slottable について、slottable割り当てられたスロットslot に設定する。

指定されたノード root に対してツリーのスロット可能要素を割り当てるには、 root包括的子孫の各スロットに対して、ツリー順スロット可能要素を割り当てるを実行する。

指定されたスロット可能要素 slottable に対してスロットを割り当てるには:

  1. slotslottable を指定してスロットを見つけた結果にする。

  2. slot が非 null の場合、slot に対してスロット可能要素を割り当てるを実行する。

4.2.2.5. スロット変更のシグナル

同一オリジンウィンドウエージェントにはシグナルスロットスロットセット)があり、これは最初は空である。[HTML]

スロット slot に対してスロット変更をシグナルするには:

  1. slotslot関連エージェントシグナルスロット追加する

  2. ミューテーションオブザーバー複合マイクロタスクをキューに入れる

4.2.3. 変更アルゴリズム

ノード child の前のノード parentノード node事前挿入妥当性を確保するには:

  1. parentDocumentDocumentFragment、 または Element ノードでない場合、"HierarchyRequestError" DOMException投げる

  2. nodeparentホストを含む包括的祖先の場合、 "HierarchyRequestError" DOMException投げる

  3. child が非 null でそのparent でない場合、 "NotFoundError" DOMException投げる

  4. nodeDocumentFragmentDocumentTypeElement、 または CharacterData ノードでない場合、 "HierarchyRequestError" DOMException投げる

  5. nodeText ノードparent文書の場合、または node文書型parent文書でない場合、 "HierarchyRequestError" DOMException投げる

  6. parent文書で、node実装するインターフェースで切り替えて、以下のいずれかの文が真の場合、 "HierarchyRequestError" DOMException投げる

    DocumentFragment

    node が複数の要素を持つか、 Text ノードを持つ場合。

    そうでない場合、node が1つの要素を持ち、かつ parent要素を持つ、child文書型である、 または child が非 null で文書型child続く場合。

    Element

    parent要素を持つ、child文書型である、 または child が非 null で文書型child続く場合。

    DocumentType

    parent文書型を持つ、child が非 null で要素child先行する、 または child が null で parent要素を持つ場合。

事前挿入として、 nodeparentchild の前に挿入するには、次の手順を実行する:

  1. nodeparentchild の前に事前挿入妥当性を確保する

  2. referenceChildchild にする。

  3. referenceChildnode の場合、referenceChildnode次の兄弟に設定する。

  4. nodeparentreferenceChild の前に挿入する。

  5. node を返す。

仕様は、すべてまたは一部のノードに対して 挿入手順を定義する場合があります。 アルゴリズムには、以下の挿入アルゴリズムで示されているように、 insertedNode が渡されます。これらの手順は、insertedNode属する ノードツリーを変更したり、 ブラウジングコンテキストを作成したり、 イベントを発火させたり、 JavaScriptを実行したりしてはなりません。ただし、これらのことを非同期で行うタスクを キューに追加することはできます。

挿入手順はJavaScript(その他の動作も含む)を実行できませんが、スクリプトから観測可能な結果を持ちます。次の例を考えてみましょう。

const h1 = document.querySelector('h1');

const fragment = new DocumentFragment();
const script = fragment.appendChild(document.createElement('script'));
const style = fragment.appendChild(document.createElement('style'));

script.innerText= 'console.log(getComputedStyle(h1).color)'; // Logs 'rgb(255, 0, 0)'
style.innerText = 'h1 {color: rgb(255, 0, 0);}';

document.body.append(fragment);

上記の例のスクリプトは 'rgb(255, 0, 0)' と出力します。なぜなら、以下の順序で処理されるためです。

  1. 挿入アルゴリズムが実行され、script および style 要素が順番に挿入されます。

    1. HTML Standardの挿入手順script 要素に対して実行されますが、何もしません。[HTML]

    2. HTML Standardの挿入手順 style 要素に対して実行され、スタイルルールがドキュメントに即座に適用されます。[HTML]

    3. HTML Standardの接続後手順script 要素に対して実行され、スクリプトが実行されます。これにより、前のステップで適用されたスタイルルールが即座に観測されます。 [HTML]

仕様は、全てまたは一部のノードに対して 接続後手順を定義することもあります。アルゴリズムにはconnectedNodeが渡され、下記の 挿入アルゴリズムで示されます。

接続後手順の目的は、 ノードconnectedNodeノードツリーを変更したり、 閲覧コンテキストを作成したり、JavaScriptを実行するなど、接続に関連する操作を行う機会を提供することです。 これらの手順により、ノードのバッチ挿入がスクリプトの観点から アトミックに行われ、主な副作用がノードツリーへのバッチ挿入が完了したに発生します。 これにより、保留中のノードツリーへの挿入が完全に終了するまで、 さらなる挿入が発生しないことが保証されます。

仕様は、全てまたは一部のノードに対して 子変更手順 を定義することができます。アルゴリズムには引数は渡されず、挿入削除データ置換から呼び出されます。

ノード挿入nodeparentに、childの前に、オプションの監視者抑制フラグ付きで挿入するには、以下の手順を実行します。

  1. もしnodeDocumentFragment ノードの場合、 nodesnodeとする。そうでなければ «node» とする。

  2. countnodesサイズとする。

  3. もしcountが0なら、終了する。

  4. もしnodeDocumentFragment ノードの場合:

    1. 削除を、そのに対して 監視者抑制フラグをセットして実行する。

    2. ツリー変更記録をキューに追加する。対象はnode、« »、nodes、null、null。

      このステップは意図的に 監視者抑制フラグを考慮しません。

  5. もしchildがnullでない場合:

    1. parentライブレンジ開始ノードで、 開始オフセットchildインデックスより大きい各ライブレンジについて、 開始オフセットcount分増やす。

    2. parentライブレンジ終了ノードで、 終了オフセットchildインデックスより大きい各ライブレンジについて、 終了オフセットcount分増やす。

  6. previousSiblingchild前の兄弟とする。 childがnullの場合はparent最後の子とする。

  7. nodesの各nodeについて、ツリー順で:

    1. 採用nodeに対してparentノード文書へ行う。

    2. もしchildがnullなら、追加nodeparentへ行う。

    3. そうでなければ、挿入parentchildインデックスの前にnodeを挿入する。

    4. もしparentシャドウホストで、 シャドウルートスロット割り当てが"named"かつ nodeスロッタブルなら、スロット割り当てを実行する。

    5. もしparentルートシャドウルートで、 parentスロットかつ 割り当てられたノードが空の場合は、 スロット変更通知parentに対して実行する。

    6. ツリーのスロッタブル割り当てnodeルートで実行する。

    7. nodeシャドウ含む包括的子孫 inclusiveDescendantについて、 シャドウ含むツリー順で:

      1. 挿入手順inclusiveDescendantで実行する。

      2. もしinclusiveDescendant接続済でない場合は 次へ

      3. もしinclusiveDescendant要素の場合:

        1. もしinclusiveDescendantカスタム要素レジストリがnullなら、 カスタム要素レジストリの検索inclusiveDescendantで実行し、その結果を inclusiveDescendantカスタム要素レジストリにセットする。

        2. そうでなく、inclusiveDescendantカスタム要素レジストリスコープ済がtrueなら、 追加inclusiveDescendantノード文書へ、 inclusiveDescendantカスタム要素レジストリスコープ文書セットへ行う。

        3. もしinclusiveDescendantカスタムなら、 カスタム要素コールバックリアクションをエンキューinclusiveDescendant、コールバック名"connectedCallback"、« »で実行する。

        4. そうでなければ、アップグレード試行inclusiveDescendantに対して行う。

          このアップグレードが成功した場合、 inclusiveDescendantconnectedCallback要素のアップグレードアルゴリズムの中で自動的にエンキューされます。

      4. そうでなく、inclusiveDescendantシャドウルートの場合:

        1. もしinclusiveDescendantカスタム要素レジストリがnullで、 null維持がfalseの場合は、 カスタム要素レジストリの検索inclusiveDescendantホストで実行し、 その結果をinclusiveDescendantカスタム要素レジストリにセットする。

        2. そうでなく、inclusiveDescendantカスタム要素レジストリがnullでなく、 かつカスタム要素レジストリスコープ済がtrueなら、 追加inclusiveDescendantノード文書inclusiveDescendantカスタム要素レジストリスコープ文書セットへ行う。

  8. もし監視者抑制フラグが未設定なら、 ツリー変更記録をキューに追加する。対象はparentnodes、« »、previousSiblingchild

  9. 子変更手順parentに対して実行する。

  10. staticNodeListリスト(初期値は« »)とする。

    全てのノード接続後手順呼び出し前に収集するのは、ノードツリーを走査中に接続後手順でツリー構造が変更される可能性があり、 同じノードに複数回呼び出される恐れがあるためです。

  11. nodesの各nodeについて、ツリー順で:

    1. nodeシャドウ含む包括的子孫 inclusiveDescendantについて、 シャドウ含むツリー順で、 追加staticNodeListに対して行う。

  12. staticNodeListnodeについて、 node接続済なら 接続後手順nodeで実行する。

仕様は、すべてまたは一部のノードに対して 移動手順を定義する場合があります。 アルゴリズムにはノード movedNodeと、ノードまたはnullである oldParentが渡されます。これは下記の移動アルゴリズムで示されます。 挿入手順と同様に、 これらの手順はmovedNodeノードツリー参加している場合、そのノードツリーを変更したり、 閲覧コンテキストを作成したり、 イベントを発火したり、 その他JavaScriptを実行してはなりません。ただし、これらの処理を非同期で実行するためにタスクとしてキューに追加することは可能です。

移動ノードnodeノードnewParentノードまたはnullであるchildの前に移動するには:

  1. もしnewParentシャドウ含むルートnodeシャドウ含むルートと異なる場合、 "HierarchyRequestError" DOMExceptionを投げる。

    これは、newParent接続状態node接続状態と一致する場合のみ、移動が行われることを保証します。

  2. もしnodenewParentホストを含む包括的祖先であれば、 "HierarchyRequestError" DOMExceptionを投げる。

  3. もしchildがnullでなく、そのnewParentでなければ、 "NotFoundError" DOMExceptionを投げる。

  4. もしnodeElementまたは CharacterData ノードでなければ、 "HierarchyRequestError" DOMExceptionを投げる。

  5. もしnodeText ノードで、 newParentドキュメントの場合、 "HierarchyRequestError" DOMExceptionを投げる。

  6. もしnewParentドキュメントnodeElement ノードであり、 newParent要素 を持つ場合、 またはchilddoctypeである場合、 またはchildがnullでなくかつdoctypechildの後にある場合"HierarchyRequestError" DOMExceptionを投げる。

  7. oldParentnodeとする。

  8. Assert: oldParentはnullでない。

  9. ライブレンジ削除前手順nodeについて実行する。

  10. NodeIterator オブジェクトiteratorで、 rootノード文書nodeノード文書であるもの全てについて、 NodeIterator削除前手順nodeiteratorで実行する。

  11. oldPreviousSiblingnode前の兄弟とする。

  12. oldNextSiblingnode次の兄弟とする。

  13. 削除nodeoldParentから行う。

  14. もしnode割り当て済みなら、 スロッタブル割り当てnode割り当てられたスロットで実行する。

  15. もしoldParentルートシャドウルートで、 oldParentスロットかつ 割り当てられたノードが空の場合、 スロット変更通知oldParentで実行する。

  16. もしnode包括的子孫としてスロットを持つ場合:

    1. ツリーのスロッタブル割り当てoldParentルートで実行する。

    2. ツリーのスロッタブル割り当てnodeで実行する。

  17. もしchildがnullでない場合:

    1. newParentライブレンジ開始ノードで、 開始オフセットchildインデックスより大きい各ライブレンジについて、 開始オフセットを1増やす。

    2. newParentライブレンジ終了ノードで、 終了オフセットchildインデックスより大きい各ライブレンジについて、 終了オフセットを1増やす。

  18. newPreviousSiblingchildがnullでない場合はchild前の兄弟とし、 そうでなければnewParent最後の子とする。

  19. もしchildがnullなら、 追加nodenewParentへ行う。

  20. そうでなければ、 挿入nodenewParentchildインデックスの前に行う。

  21. もしnewParentシャドウホストで、 シャドウルートスロット割り当てが"named"であり、 nodeスロッタブルなら、 スロット割り当てnodeで実行する。

  22. もしnewParentルートシャドウルートで、 newParentスロットかつ 割り当てられたノードが空の場合は、 スロット変更通知newParentで実行する。

  23. ツリーのスロッタブル割り当てnodeルートで実行する。

  24. nodeシャドウ含む包括的子孫 inclusiveDescendantについて、シャドウ含むツリー順で:

    1. もしinclusiveDescendantnodeなら、 移動手順inclusiveDescendantoldParentで実行する。 そうでなければ、移動手順inclusiveDescendantとnullで実行する。

      この移動アルゴリズムは 挿入削除とは別のプリミティブであるため、 inclusiveDescendantに対して従来の 挿入手順削除手順は呼び出されません。

    2. もしinclusiveDescendantカスタムで、 newParent接続済なら、 カスタム要素コールバックリアクションをエンキューinclusiveDescendant、コールバック名"connectedMoveCallback"、« »で実行する。

  25. ツリー変更記録をキューに追加する。 oldParent、« »、« node »、oldPreviousSiblingoldNextSiblingを対象とする。

  26. ツリー変更記録をキューに追加する。 newParent、« node »、« »、newPreviousSiblingchildを対象とする。

追加するには、 nodeparent事前挿入として nodeparentのnullの前に挿入します。

置換するには、 parent内のchildnodeで置き換えるには、以下の手順を実行します。

  1. もしparentDocumentDocumentFragment、 またはElement ノードでなければ、 "HierarchyRequestError" DOMExceptionを投げる。

  2. もしnodeparentホストを含む包括的祖先であれば、 "HierarchyRequestError" DOMExceptionを投げる。

  3. もしchildparentでなければ、 "NotFoundError" DOMExceptionを投げる。

  4. もしnodeDocumentFragmentDocumentTypeElement、 または CharacterData ノードでなければ、 "HierarchyRequestError" DOMExceptionを投げる。

  5. nodeText ノードであり、 parentドキュメントである場合、 またはnodedoctypeparentドキュメントでなければ、 "HierarchyRequestError" DOMExceptionを投げる。

  6. もしparentドキュメントであり、下記のいずれかの条件が nodeが実装するインターフェースごとに真であれば、 "HierarchyRequestError" DOMExceptionを投げる。

    DocumentFragment

    nodeが2つ以上の要素を持つ場合、 またはText ノードを持つ場合。

    また、nodeが1つの要素を持ち、 parentchild以外の要素を持つ場合、 またはdoctypechildの後にある場合。

    Element

    parentchild以外の要素を持つ場合、 またはdoctypechildの後にある場合。

    DocumentType

    parentchild以外のdoctypeを持つ場合、 または要素childの前にある場合。

    上記の条件は事前挿入アルゴリズムと異なります。

  7. referenceChildchild次の兄弟とする。

  8. もしreferenceChildnodeなら、 referenceChildnode次の兄弟にセットする。

  9. previousSiblingchild前の兄弟とする。

  10. removedNodesを空の集合とする。

  11. もしchildがnullでなければ:

    1. removedNodesに« child »をセットする。

    2. 削除child監視者抑制フラグをセットして実行する。

    上記が偽となるのはchildnodeの場合のみです。

  12. nodeDocumentFragment ノードなら nodesnodeとする。そうでなければ« node »とする。

  13. 挿入nodeparentreferenceChildの前に 監視者抑制フラグ付きで実行する。

  14. ツリー変更記録をキューに追加する。 parentnodesremovedNodespreviousSiblingreferenceChildを対象とする。

  15. childを返す。

全て置換するには、 parent内の全てをnodeで置換するには、以下の手順を実行します。

  1. removedNodesparentとする。

  2. addedNodesを空集合とする。

  3. もしnodeDocumentFragment ノードなら、 addedNodesnodeにセットする。

  4. そうでなく、nodeがnullでなければ、addedNodesを« node »にセットする。

  5. 削除parent全てに、ツリー順で、 監視者抑制フラグをセットして実行する。

  6. もしnodeがnullでなければ、挿入nodeparentのnullの前に 監視者抑制フラグ付きで実行する。

  7. addedNodesまたはremovedNodes空でなければツリー変更記録をキューに追加する。 parentaddedNodesremovedNodes、null、nullを対象とする。

このアルゴリズムはノードツリー の制約を一切チェックしません。仕様策定者は慎重に使用する必要があります。

事前削除するには、 parentからchildを事前削除するには、以下の手順を実行します。

  1. もしchildparentでなければ、 "NotFoundError" DOMExceptionを投げる。

  2. 削除childに実行する。

  3. childを返す。

仕様は、すべてまたは一部のノードに対して 削除手順を定義する場合があります。 アルゴリズムにはノード removedNodeと、ノードまたはnullの oldParentが渡されます。これは下記の削除アルゴリズムで示されます。

削除ノードnodeに、 オプションで監視者抑制フラグを指定して実行するには、以下の手順を実行します。

  1. parentnodeとする。

  2. Assert: parentはnullでない。

  3. ライブレンジ削除前手順nodeで実行する。

  4. NodeIterator オブジェクトiteratorで、 rootノード文書nodeノード文書であるもの全てについて、 NodeIterator削除前手順nodeiteratorで実行する。

  5. oldPreviousSiblingnode前の兄弟とする。

  6. oldNextSiblingnode次の兄弟とする。

  7. 削除nodeparentから行う。

  8. もしnode割り当て済みなら、 スロッタブル割り当てnode割り当てられたスロットで実行する。

  9. もしparentルートシャドウルートで、 parentスロットかつ 割り当てられたノードが空の場合は、 スロット変更通知parentで実行する。

  10. もしnode包括的子孫としてスロットを持つ場合:

    1. ツリーのスロッタブル割り当てparentルートで実行する。

    2. ツリーのスロッタブル割り当てnodeで実行する。

  11. 削除手順nodeparentで実行する。

  12. isParentConnectedparent接続状態とする。

  13. もしnodeカスタムで、 isParentConnectedがtrueなら、 カスタム要素コールバックリアクションをエンキューnode、コールバック名"disconnectedCallback"、« »で実行する。

    現状ではカスタム要素parentを渡されません。今後必要があれば変更される可能性があります。

  14. nodeシャドウ含む子孫 descendantについて、シャドウ含むツリー順で:

    1. 削除手順descendantとnullで実行する。

    2. もしdescendantカスタムで、 isParentConnectedがtrueなら、 カスタム要素コールバックリアクションをエンキューdescendant、コールバック名"disconnectedCallback"、« »で実行する。

  15. parent包括的祖先inclusiveAncestorについて、 さらに registeredinclusiveAncestor登録済みオブザーバリストについて調べ、 もしregisteredoptions["subtree"]がtrueなら、 追加を新しい一時登録済みオブザーバで行い、 observerregisteredobserveroptionsregisteredoptionssourceregisterednode登録済みオブザーバリストに追加する。

  16. もし監視者抑制フラグが未設定なら、 ツリー変更記録をキューに追加する。 parent、« »、« node »、oldPreviousSiblingoldNextSiblingを対象とする。

  17. 子変更手順parentで実行する。

4.2.4. ミックスイン NonElementParentNode

Web互換性のため、getElementById() メソッドは要素(およびParentNode)では公開されません。

interface mixin NonElementParentNode {
  Element? getElementById(DOMString elementId);
};
Document includes NonElementParentNode;
DocumentFragment includes NonElementParentNode;
node . getElementById(elementId)

node子孫の中で IDelementIdである 最初の要素を返します。

getElementById(elementId) メソッドの手順は、 ツリー順this子孫の中から IDelementIdである 最初の要素を返します。 該当する要素がなければ、nullを返します。

4.2.5. ミックスイン DocumentOrShadowRoot

interface mixin DocumentOrShadowRoot {
  readonly attribute CustomElementRegistry? customElementRegistry;
};
Document includes DocumentOrShadowRoot;
ShadowRoot includes DocumentOrShadowRoot;
registry = documentOrShadowRoot . customElementRegistry

documentOrShadowRootCustomElementRegistry オブジェクトを返します(存在すれば)。なければnullを返します。

customElementRegistry ゲッターの手順は以下の通りです。

  1. thisドキュメントなら、 thisカスタム要素レジストリを返す。

  2. Assert: thisShadowRoot ノードである。

  3. thisカスタム要素レジストリを返す。

DocumentOrShadowRoot ミックスインは、ドキュメントシャドウルートの両方で 共有されるAPIを定義したい他の標準でも利用されることが期待されています。

4.2.6. ミックスイン ParentNode

ノード群をノードに変換するには、 nodesdocumentを受け取り、以下の手順を実行します。

  1. nodeをnullとする。

  2. nodes内の各文字列を、データがその文字列、 ノード文書documentである 新しいTextノードに置き換える。

  3. もしnodesが1つのノードのみなら、 nodenodes[0]をセットする。

  4. そうでなければ、nodeノード文書documentである 新しいDocumentFragmentノードをセットし、 その後nodes内の各ノード(もしあれば)を 追加する。

  5. nodeを返す。

interface mixin ParentNode {
  [SameObject] readonly attribute HTMLCollection children;
  readonly attribute Element? firstElementChild;
  readonly attribute Element? lastElementChild;
  readonly attribute unsigned long childElementCount;

  [CEReactions, Unscopable] undefined prepend((Node or DOMString)... nodes);
  [CEReactions, Unscopable] undefined append((Node or DOMString)... nodes);
  [CEReactions, Unscopable] undefined replaceChildren((Node or DOMString)... nodes);

  [CEReactions] undefined moveBefore(Node node, Node? child);

  Element? querySelector(DOMString selectors);
  [NewObject] NodeList querySelectorAll(DOMString selectors);
};
Document includes ParentNode;
DocumentFragment includes ParentNode;
Element includes ParentNode;
collection = node . children
nodeである要素を返します。
element = node . firstElementChild
最初の要素であるものを返します。なければnull。
element = node . lastElementChild
最後の要素であるものを返します。なければnull。
node . prepend(nodes)

nodesnode最初の子の前に挿入します。nodes内の文字列は同等のTextノードに置き換えられます。

ノードツリーの制約に違反した場合、"HierarchyRequestError"DOMExceptionを投げます。

node . append(nodes)

nodesnode最後の子の後に挿入します。nodes内の文字列は同等のTextノードに置き換えられます。

ノードツリーの制約に違反した場合、"HierarchyRequestError"DOMExceptionを投げます。

node . replaceChildren(nodes)

node全てをnodesで置換します。nodes内の文字列は同等のTextノードに置き換えられます。

ノードツリーの制約に違反した場合、"HierarchyRequestError"DOMExceptionを投げます。

node . moveBefore(movedNode, child)

事前に削除せず、movedNodenodechildの後に移動します。childがnullの場合はnode最後の子の後に移動します。このメソッドはmovedNodeに関連する状態を保持します。

ノードツリーの制約違反、または移動ノードの状態が保持できない場合、"HierarchyRequestError"DOMExceptionを投げます。

node . querySelector(selectors)

node子孫のうち、selectorsに一致する最初の要素を返します。

node . querySelectorAll(selectors)

node子孫のうち、selectorsに一致する全ての要素を返します。

childrenゲッターの手順は、 thisをルートとし、 要素のみのに一致する HTMLCollection コレクションを返すことです。

firstElementChildゲッターの手順は、 最初の要素であるものを返します。なければnull。

lastElementChildゲッターの手順は、 最後の要素であるものを返します。なければnull。

childElementCountゲッターの手順は、 要素であるの数を返します。

prepend(nodes)メソッドの手順は以下の通りです。

  1. nodeを、nodesthisノード文書を受けて ノード群をノードに変換した結果とする。

  2. 事前挿入nodethis最初の子の前に挿入する。

append(nodes)メソッドの手順は以下の通りです。

  1. nodeを、nodesthisノード文書を受けて ノード群をノードに変換した結果とする。

  2. 追加nodethisへ追加する。

replaceChildren(nodes)メソッドの手順は以下の通りです。

  1. nodeを、nodesthisノード文書を受けて ノード群をノードに変換した結果とする。

  2. 事前挿入の妥当性の確保nodethisのnullの前で実行する。

  3. 全て置換nodethis内で実行する。

moveBefore(node, child) メソッドの手順は以下の通りです。

  1. referenceChildchildとする。

  2. もしreferenceChildnodeなら、 referenceChildnode次の兄弟にセットする。

  3. 移動nodethisreferenceChildの前で実行する。

querySelector(selectors)メソッドの手順は、 セレクタ文字列のスコープマッチselectorsに対してthisで実行し、結果が空リストでなければその最初の結果を返し、そうでなければnullを返します。

querySelectorAll(selectors)メソッドの手順は、 セレクタ文字列のスコープマッチselectorsに対してthisで実行した 静的な結果を返します。

4.2.7. ミックスイン NonDocumentTypeChildNode

Web互換性のため、previousElementSibling および nextElementSibling 属性はdoctype(およびChildNode)で公開されません。

interface mixin NonDocumentTypeChildNode {
  readonly attribute Element? previousElementSibling;
  readonly attribute Element? nextElementSibling;
};
Element includes NonDocumentTypeChildNode;
CharacterData includes NonDocumentTypeChildNode;
element = node . previousElementSibling
最初の前の兄弟要素であるものを返します。なければnull。
element = node . nextElementSibling
最初の後の兄弟要素であるものを返します。なければnull。

previousElementSibling ゲッターの手順は、最初の前の兄弟要素であるものを返します。なければnull。

nextElementSibling ゲッターの手順は、最初の後の兄弟要素であるものを返します。なければnull。

4.2.8. ミックスイン ChildNode

interface mixin ChildNode {
  [CEReactions, Unscopable] undefined before((Node or DOMString)... nodes);
  [CEReactions, Unscopable] undefined after((Node or DOMString)... nodes);
  [CEReactions, Unscopable] undefined replaceWith((Node or DOMString)... nodes);
  [CEReactions, Unscopable] undefined remove();
};
DocumentType includes ChildNode;
Element includes ChildNode;
CharacterData includes ChildNode;
node . before(...nodes)

nodesnodeの直前に挿入します。nodes内の文字列は同等のTextノードに置き換えられます。

ノードツリーの制約に違反した場合、"HierarchyRequestError"DOMExceptionを投げます。

node . after(...nodes)

nodesnodeの直後に挿入します。nodes内の文字列は同等のTextノードに置き換えられます。

ノードツリーの制約に違反した場合、"HierarchyRequestError"DOMExceptionを投げます。

node . replaceWith(...nodes)

nodenodesで置き換えます。nodes内の文字列は同等のTextノードに置き換えられます。

ノードツリーの制約に違反した場合、"HierarchyRequestError"DOMExceptionを投げます。

node . remove()
nodeを削除します。

before(nodes)メソッドの手順は以下の通りです。

  1. parentthisとする。

  2. もしparentがnullなら、終了する。

  3. viablePreviousSiblingthisの 最初の前の 兄弟nodesに含まれていないものとする。なければnull。

  4. nodenodesthisノード文書ノード群をノードに変換した結果とする。

  5. もしviablePreviousSiblingがnullなら、parent最初の子をセットする。そうでなければviablePreviousSibling次の兄弟をセットする。

  6. 事前挿入nodeparentviablePreviousSiblingの前に挿入する。

after(nodes) メソッドの手順は以下の通りです。

  1. parentthisとする。

  2. もしparentがnullなら、終了する。

  3. viableNextSiblingthisの 最初の後の 兄弟nodesに含まれていないものとする。なければnull。

  4. nodenodesthisノード文書ノード群をノードに変換した結果とする。

  5. 事前挿入nodeparentviableNextSiblingの前に挿入する。

replaceWith(nodes)メソッドの手順は以下の通りです。

  1. parentthisとする。

  2. もしparentがnullなら、終了する。

  3. viableNextSiblingthisの 最初の後の 兄弟nodesに含まれていないものとする。なければnull。

  4. nodenodesthisノード文書ノード群をノードに変換した結果とする。

  5. もしthisparentなら、 置換thisnodeparent内で置換する。

    thisnodeに挿入された可能性があります。

  6. そうでなければ、事前挿入nodeparentviableNextSiblingの前に挿入する。

remove()メソッドの手順は以下の通りです。

  1. もしthisがnullなら、終了する。

  2. 削除thisで実行する。

4.2.9. ミックスイン Slottable

interface mixin Slottable {
  readonly attribute HTMLSlotElement? assignedSlot;
};
Element includes Slottable;
Text includes Slottable;

assignedSlot ゲッターの手順は、find a slotthisとtrueで呼び出した結果を返します。

4.2.10. 旧式コレクション: NodeListHTMLCollection

コレクションとは、 ノードのリストを表すオブジェクトです。 コレクションは、 ライブ または 静的 のいずれかです。 特に指示がない限り、コレクションライブでなければなりません。

コレクションライブの場合、 そのオブジェクトの属性やメソッドは実際の基礎データで動作し、データのスナップショットではありません。

コレクションが作成されるとき、 フィルターとルートが関連付けられます。

コレクションはその後、 与えられたフィルターに一致するノードのみを含む、そのルートである部分木のビューを表現します。 このビューは線形です。特別な要件がない限り、コレクション内のノードはツリー順で並べられる必要があります。

4.2.10.1. インターフェース NodeList

NodeList オブジェクトはコレクションであり、ノードを保持します。

[Exposed=Window]
interface NodeList {
  getter Node? item(unsigned long index);
  readonly attribute unsigned long length;
  iterable<Node>;
};
collection . length
コレクション内のノードの数を返します。
element = collection . item(index)
element = collection[index]
コレクションからインデックスindexノードを返します。 コレクション内のノードツリー順で並べられています。

オブジェクトのサポートされるプロパティインデックスは、ノードの数が0〜(ノード数-1)の範囲の数値です。 要素がない場合、サポートされるプロパティインデックスはありません。

length属性は、 コレクションで表現されるノード数を返します。

item(index)メソッドは、 コレクション内のindex番目のノードを返します。ノードがなければnullを返します。

4.2.10.2. インターフェース HTMLCollection
[Exposed=Window, LegacyUnenumerableNamedProperties]
interface HTMLCollection {
  readonly attribute unsigned long length;
  getter Element? item(unsigned long index);
  getter Element? namedItem(DOMString name);
};

HTMLCollection オブジェクトはコレクションであり、要素を保持します。

HTMLCollection は歴史的な遺物でありWebから取り除くことができません。 開発者は引き続き使用できますが、新しいAPI標準の設計者は使用すべきではありません(IDLではsequence<T>を使ってください)。

collection . length
コレクション内の要素の数を返す。
element = collection . item(index)
element = collection[index]
コレクションから、インデックスindexで指定された要素を返す。 要素ツリー順でソートされている。
element = collection . namedItem(name)
element = collection[name]
コレクションの中から、nameというIDまたは名前を持つ最初の要素を返す。

オブジェクトのサポートされるプロパティインデックスは、要素の数が0〜(要素数-1)の範囲の数値です。 要素がなければサポートされるプロパティインデックスはありません。

lengthゲッターの手順は、 コレクションで表現されるノード数を返します。

item(index)メソッドの手順は、 コレクション内のindex番目の要素を返します。要素がなければnullを返します。

サポートされるプロパティ名は以下の手順で得られるリストの値です:

  1. resultを空リストとする。

  2. コレクションで表現されるelementについて、ツリー順で:

    1. もしelementresultに含まれていないIDを持つなら、 elementIDresultに追加する。

    2. もしelementHTML名前空間にあり、 name属性を持ち、 そのが空文字列ではなくresultにも含まれていなければ、 elementname属性resultに追加する。

  3. resultを返す。

namedItem(key)メソッドの手順は:

  1. keyが空文字列ならnullを返す。

  2. 以下のいずれかが真となるコレクション内の最初の要素を返す:

    該当する要素がなければnullを返します。

4.3. ミューテーションオブザーバー

同一オリジンウィンドウエージェントは、 mutation observer microtask queued (真偽値)を持ち、初期値はfalseです。[HTML]

同一オリジンウィンドウエージェントはさらに pending mutation observers(0個以上の集合で、MutationObserverオブジェクト)を持ち、初期値は空です。

mutation observer microtask をキューする には、次の手順を実行します:

  1. surrounding agentmutation observer microtask queuedがtrueなら、終了する。

  2. surrounding agentmutation observer microtask queuedをtrueに設定する。

  3. マイクロタスクをキューし、マイクロタスクnotify mutation observersを実行する。

notify mutation observersを実行するには、次の手順を実行します:

  1. surrounding agentmutation observer microtask queuedをfalseに設定する。

  2. notifySetクローンした surrounding agentpending mutation observersとする。

  3. 空にするで、surrounding agentpending mutation observersを空にする。

  4. signalSetクローンした surrounding agentsignal slotsとする。

  5. 空にするで、surrounding agentsignal slotsを空にする。

  6. moについてnotifySetを繰り返す:

    1. recordsmorecord queueクローンとする。

    2. 空にするmorecord queueを空にする。

    3. nodeについてmonode listを繰り返し、 removemonoderegistered observer listにある 全てのtransient registered observerを削除する。

    4. もしrecords空でなければコールバック関数を呼び出すmocallbackを« records, mo »と "report"で呼び出し、this値としてmoを渡す。

  7. slotについてsignalSetを繰り返し、 イベントを発火する。 イベント名はslotchange、属性 bubbles を true にする。 対象はslot


ノードregistered observer list(0個以上のリストで、 registered observer)を持ち、初期値は空です。

registered observerは、 observerMutationObserverオブジェクト)と optionsMutationObserverInit辞書)で構成されます。

transient registered observerは、 registered observerであり、 さらにsourceregistered observer)を持ちます。

transient registered observerは、 ノード子孫が削除された後でも その変化を追跡するために使われます。これは、subtreenodeでtrueのとき、変化が失われないようにするためです。

4.3.1. インターフェース MutationObserver

[Exposed=Window]
interface MutationObserver {
  constructor(MutationCallback callback);

  undefined observe(Node target, optional MutationObserverInit options = {});
  undefined disconnect();
  sequence<MutationRecord> takeRecords();
};

callback MutationCallback = undefined (sequence<MutationRecord> mutations, MutationObserver observer);

dictionary MutationObserverInit {
  boolean childList = false;
  boolean attributes;
  boolean characterData;
  boolean subtree = false;
  boolean attributeOldValue;
  boolean characterDataOldValue;
  sequence<DOMString> attributeFilter;
};

MutationObserver オブジェクトは、ツリー内のノードの 変化を監視するために使用できます。

MutationObserver オブジェクトには、次の概念が関連付けられています:

observer = new MutationObserver(callback)
MutationObserver オブジェクトを生成し、そのcallbackcallbackを設定します。 callbackは、最初の引数にMutationRecordオブジェクトのリスト、 2番目の引数に生成されたMutationObserverオブジェクトが渡されて呼び出されます。 observe() メソッドで登録されたノードが変化した後に呼び出されます。
observer . observe(target, options)
ユーザーエージェントにtargetノード)を監視し、 options(オブジェクト)で指定した条件に基づいて変化を報告するよう指示します。

options引数は、オブジェクトメンバーでミューテーション監視のオプションを設定できます。使用可能なメンバーは以下の通り:

childList
trueにすると、targetへの変化を監視します。
attributes
trueにすると、target属性への変化を監視します。 attributeOldValueattributeFilter が指定されている場合は省略可能です。
characterData
trueにすると、targetデータへの変化を監視します。 characterDataOldValue が指定されている場合は省略可能です。
subtree
trueにすると、targetだけでなくtarget子孫への変化も監視します。
attributeOldValue
attributes がtrueか省略されていて、target属性の変化前の値を記録する必要がある場合にtrueを指定します。
characterDataOldValue
characterData がtrueか省略されていて、targetデータの変化前の値を記録する必要がある場合にtrueを指定します。
attributeFilter
すべての属性の変化を監視する必要がなく、 attributes がtrueか省略されている場合に、 監視したいローカル名(名前空間なし)のリストを指定します。
observer . disconnect()
observerによる変化の監視を停止します。再度observe() メソッドが使用されるまで、observercallbackは呼び出されません。
observer . takeRecords()
record queueを空にし、もともと入っていたものを返します。

new MutationObserver(callback) の手順は、thiscallbackcallbackを設定することです。

observe(target, options) メソッドの手順は以下の通りです:

  1. もしoptions["attributeOldValue"] または options["attributeFilter"] が存在し、かつ options["attributes"] が存在しない場合は、 options["attributes"] をtrueに設定する。

  2. もしoptions["characterDataOldValue"] が存在し、 options["characterData"] が存在しない場合は、options["characterData"] をtrueに設定する。

  3. もしoptions["childList"]、 options["attributes"]、 options["characterData"] のいずれもtrueでなければ、TypeErrorを投げる。

  4. もしoptions["attributeOldValue"] がtrueかつ options["attributes"] がfalseなら、TypeErrorを投げる。

  5. もしoptions["attributeFilter"] が存在し、 options["attributes"] がfalseなら、TypeErrorを投げる。

  6. もしoptions["characterDataOldValue"] がtrueかつ options["characterData"] がfalseなら、TypeErrorを投げる。

  7. registeredについてtargetregistered observer listを繰り返し、 registeredobserverthisであれば:

    1. nodeについてthisnode listを繰り返し、 removeregisterednoderegistered observer listにある 全てのtransient registered observerを削除する。

    2. registeredoptionsoptionsに設定する。

  8. そうでなければ:

    1. 新しい registered observerobserverthisoptionsoptions)を targetregistered observer listに追加する。

    2. 弱参照targetthisnode listに追加する。

disconnect()メソッドの手順は以下の通りです:

  1. nodeについてthisnode listを繰り返し、 removenoderegistered observer listに登録されていて、 thisobserverであるものを削除する。

  2. 空にするthisrecord queueを空にする。

takeRecords()メソッドの手順は以下の通りです:

  1. recordsクローンthisrecord queueから作成する。

  2. 空にするthisrecord queueを空にする。

  3. recordsを返す。

4.3.2. ミューテーションレコードのキューイング

ミューテーションレコードをキューするには、typetargetnamenamespaceoldValueaddedNodesremovedNodespreviousSiblingnextSiblingを対象に、以下の手順を実行します。

  1. interestedObserversを空のマップとする。

  2. nodestarget包括的祖先とする。

  3. nodes内の各nodeについて、さらにregisteredについて、noderegistered observer listを繰り返す:

    1. optionsregisteredoptionsとする。

    2. 次のいずれも真でなければ

      • nodetargetでなく、かつoptions["subtree"]がfalse
      • typeが"attributes"で、options["attributes"]が存在せず、またはfalse
      • typeが"attributes"で、options["attributeFilter"]が存在し、options["attributeFilter"]がnameを含まず、またはnamespaceがnullでない
      • typeが"characterData"で、options["characterData"]が存在せず、またはfalse
      • typeが"childList"で、options["childList"]がfalse

      ならば:

      1. moregisteredobserverとする。

      2. もしinterestedObservers[mo]が存在しなければ、セットinterestedObservers[mo]をnullに設定する。

      3. typeが"attributes"でoptions["attributeOldValue"]がtrue、またはtypeが"characterData"でoptions["characterDataOldValue"]がtrueなら、 セットinterestedObservers[mo]をoldValueに設定する。

  4. observermappedOldValueについてinterestedObserversを繰り返す:

    1. recordを新しいMutationRecordオブジェクトとし、 typetypetargettargetattributeNamenameattributeNamespacenamespaceoldValuemappedOldValueaddedNodesaddedNodesremovedNodesremovedNodespreviousSiblingpreviousSiblingnextSiblingnextSiblingを設定する。

    2. エンキューrecordobserverrecord queueに追加する。

    3. 追加observersurrounding agentpending mutation observersに追加する。

  5. mutation observer microtask をキューする

ツリーのミューテーションレコードをキューするには、targetaddedNodesremovedNodespreviousSiblingnextSiblingを対象に、以下の手順を実行します。

  1. Assert: addedNodesまたはremovedNodes空でないこと。

  2. ミューテーションレコードをキューするを"childList"型でtarget、null、null、null、addedNodesremovedNodespreviousSiblingnextSiblingで実行する。

4.3.3. インターフェース MutationRecord

[Exposed=Window]
interface MutationRecord {
  readonly attribute DOMString type;
  [SameObject] readonly attribute Node target;
  [SameObject] readonly attribute NodeList addedNodes;
  [SameObject] readonly attribute NodeList removedNodes;
  readonly attribute Node? previousSibling;
  readonly attribute Node? nextSibling;
  readonly attribute DOMString? attributeName;
  readonly attribute DOMString? attributeNamespace;
  readonly attribute DOMString? oldValue;
};
record . type
変更が属性なら"attributes"を返す。 ノードCharacterDataであれば"characterData"を返す。 ツリーへの変更なら"childList"を返す。
record . target
変更が起きたノードを返す。typeに依存する。 "attributes"の場合は変更された要素、 "characterData"の場合は変更されたCharacterDataノード、 "childList"の場合は変更されたノード
record . addedNodes
record . removedNodes
追加・削除されたノードをそれぞれ返す。
record . previousSibling
record . nextSibling
追加・削除されたノードのそれぞれの前の兄弟次の兄弟を返す。なければnull。
record . attributeName
変更された属性のローカル名を返す。なければnull。
record . attributeNamespace
変更された属性の名前空間を返す。なければnull。
record . oldValue
戻り値はtypeによって異なる。 "attributes"の場合は変更前の属性値、 "characterData"の場合は変更前のデータ、 "childList"の場合はnull。

typetargetaddedNodesremovedNodespreviousSiblingnextSiblingattributeNameattributeNamespaceoldValueの各属性は、それぞれ初期化された値を返す。

4.4. インターフェース Node

[Exposed=Window]
interface Node : EventTarget {
  const unsigned short ELEMENT_NODE = 1;
  const unsigned short ATTRIBUTE_NODE = 2;
  const unsigned short TEXT_NODE = 3;
  const unsigned short CDATA_SECTION_NODE = 4;
  const unsigned short ENTITY_REFERENCE_NODE = 5; // legacy
  const unsigned short ENTITY_NODE = 6; // legacy
  const unsigned short PROCESSING_INSTRUCTION_NODE = 7;
  const unsigned short COMMENT_NODE = 8;
  const unsigned short DOCUMENT_NODE = 9;
  const unsigned short DOCUMENT_TYPE_NODE = 10;
  const unsigned short DOCUMENT_FRAGMENT_NODE = 11;
  const unsigned short NOTATION_NODE = 12; // legacy
  readonly attribute unsigned short nodeType;
  readonly attribute DOMString nodeName;

  readonly attribute USVString baseURI;

  readonly attribute boolean isConnected;
  readonly attribute Document? ownerDocument;
  Node getRootNode(optional GetRootNodeOptions options = {});
  readonly attribute Node? parentNode;
  readonly attribute Element? parentElement;
  boolean hasChildNodes();
  [SameObject] readonly attribute NodeList childNodes;
  readonly attribute Node? firstChild;
  readonly attribute Node? lastChild;
  readonly attribute Node? previousSibling;
  readonly attribute Node? nextSibling;

  [CEReactions] attribute DOMString? nodeValue;
  [CEReactions] attribute DOMString? textContent;
  [CEReactions] undefined normalize();

  [CEReactions, NewObject] Node cloneNode(optional boolean subtree = false);
  boolean isEqualNode(Node? otherNode);
  boolean isSameNode(Node? otherNode); // legacy alias of ===

  const unsigned short DOCUMENT_POSITION_DISCONNECTED = 0x01;
  const unsigned short DOCUMENT_POSITION_PRECEDING = 0x02;
  const unsigned short DOCUMENT_POSITION_FOLLOWING = 0x04;
  const unsigned short DOCUMENT_POSITION_CONTAINS = 0x08;
  const unsigned short DOCUMENT_POSITION_CONTAINED_BY = 0x10;
  const unsigned short DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = 0x20;
  unsigned short compareDocumentPosition(Node other);
  boolean contains(Node? other);

  DOMString? lookupPrefix(DOMString? namespace);
  DOMString? lookupNamespaceURI(DOMString? prefix);
  boolean isDefaultNamespace(DOMString? namespace);

  [CEReactions] Node insertBefore(Node node, Node? child);
  [CEReactions] Node appendChild(Node node);
  [CEReactions] Node replaceChild(Node node, Node child);
  [CEReactions] Node removeChild(Node child);
};

dictionary GetRootNodeOptions {
  boolean composed = false;
};

Nodeは、すべてのノードで使用される抽象インターフェースです。直接インスタンス化することはできません。

ノードには、生成時に設定される ノード文書が関連付けられており、 これはドキュメントです。

ノードノード文書adoptアルゴリズムによって変更されることがあります。

ノード親取得アルゴリズムは、eventを受け取り、割り当てられたスロットがあればそれを返し(割り当て済みの場合)、そうでなければを返します。

ノードにはregistered observer listもあります。


node . nodeType

nodeの型に応じた数値を次のように返します:

Element
Node . ELEMENT_NODE (1)。
Attr
Node . ATTRIBUTE_NODE (2)。
単独のTextノード
Node . TEXT_NODE (3)。
CDATASection
Node . CDATA_SECTION_NODE (4)。
ProcessingInstruction
Node . PROCESSING_INSTRUCTION_NODE (7)。
Comment
Node . COMMENT_NODE (8)。
Document
Node . DOCUMENT_NODE (9)。
DocumentType
Node . DOCUMENT_TYPE_NODE (10)。
DocumentFragment
Node . DOCUMENT_FRAGMENT_NODE (11)。
node . nodeName

nodeの型に応じた文字列を次のように返します:

Element
HTML大文字化された修飾名
Attr
修飾名
単独のTextノード
"#text"。
CDATASection
"#cdata-section"。
ProcessingInstruction
target
Comment
"#comment"。
Document
"#document"。
DocumentType
name
DocumentFragment
"#document-fragment"。

nodeTypeゲッターの手順は、インターフェースthisimplementsする型によって最初に一致するものを返します:

Element
ELEMENT_NODE (1)
Attr
ATTRIBUTE_NODE (2);
単独のTextノード
TEXT_NODE (3);
CDATASection
CDATA_SECTION_NODE (4);
ProcessingInstruction
PROCESSING_INSTRUCTION_NODE (7);
Comment
COMMENT_NODE (8);
Document
DOCUMENT_NODE (9);
DocumentType
DOCUMENT_TYPE_NODE (10);
DocumentFragment
DOCUMENT_FRAGMENT_NODE (11).

nodeNameゲッターの手順は、インターフェースthisimplementsする型によって最初に一致するものを返します:

Element
そのHTML大文字化修飾名
Attr
その修飾名
単独のTextノード
"#text"。
CDATASection
"#cdata-section"。
ProcessingInstruction
そのtarget
Comment
"#comment"。
Document
"#document"。
DocumentType
そのname
DocumentFragment
"#document-fragment"。

node . baseURI
nodeノード文書ドキュメントの基底URLを返す。

baseURIゲッターの手順は、 thisノード文書ドキュメントの基底URL直列化して返します。


node . isConnected

node接続済みならtrue、そうでなければfalseを返します。

node . ownerDocument
ノード文書を返します。 ドキュメントの場合はnullを返します。
node . getRootNode()
nodeルートを返します。
node . getRootNode({ composed:true })
nodeシャドウ含むルートを返します。
node . parentNode
を返します。
node . parentElement
親要素を返します。
node . hasChildNodes()
nodeを持つかどうか返します。
node . childNodes
を返します。
node . firstChild
最初の子を返します。
node . lastChild
最後の子を返します。
node . previousSibling
前の兄弟を返します。
node . nextSibling
次の兄弟を返します。

isConnectedゲッターの手順は、 this接続済みならtrue、そうでなければfalseを返すことです。

ownerDocumentゲッターの手順は、 thisドキュメントならnullを返し、そうでなければthisノード文書を返します。

ドキュメントノード文書はそのドキュメント自身です。すべてのノードは常にノード文書を持ちます。

getRootNode(options)メソッドの手順は、 options["composed"]がtrueなら thisシャドウ含むルートを返し、そうでなければ thisルートを返します。

parentNodeゲッターの手順は、 thisを返します。

parentElementゲッターの手順は、 this親要素を返します。

hasChildNodes()メソッドの手順は、 thisを持つならtrue、そうでなければfalseを返します。

childNodesゲッターの手順は、 thisをルートとし、のみに一致する NodeListを返します。

firstChildゲッターの手順は、 this最初の子を返します。

lastChildゲッターの手順は、 this最後の子を返します。

previousSiblingゲッターの手順は、 this前の兄弟を返します。

nextSiblingゲッターの手順は、 this次の兄弟を返します。


nodeValueゲッターの手順は、 インターフェースthisimplementsする型によって次のように返します:

Attr
this
CharacterData
thisデータ
その他
Null。

nodeValueセッターの手順は、 渡された値がnullの場合は空文字列として扱い、その後以下の通りに実行します。インターフェースthis implementsによって切り替えます:

Attr

既存属性値の設定thisと渡された値で行う。

CharacterData

データ置換をノードthis、offset 0、count this長さ、データを渡された値で実行する。

その他

何もしない。

テキストコンテンツ取得は、 ノードnodeについて、インターフェースnodeimplementsする型によって次のように返します:

DocumentFragment
Element
node子孫テキストコンテンツ
Attr
node
CharacterData
nodeデータ
その他
Null。

textContentゲッターの手順は、 テキストコンテンツ取得thisで実行した結果を返します。

文字列全置換は、文字列stringをノードparent内で次の手順で実行します:

  1. nodeをnullとする。

  2. もしstringが空文字列でなければ、 nodeデータstringノード文書parentノード文書である新しいTextノードを設定する。

  3. 全て置換nodeparent内で実行する。

テキストコンテンツ設定は、 ノードnodeと文字列valueについて、 インターフェースnodeimplementsする型によって以下の通りに実行します:

DocumentFragment
Element

文字列全置換valuenode内で実行する。

Attr

既存属性値の設定nodevalueで行う。

CharacterData

データ置換をノードnode、offset 0、count node長さ、データvalueで実行する。

その他

何もしない。

textContentセッターの手順は、 渡された値がnullの場合は空文字列として扱い、その後テキストコンテンツ設定thisと渡された値で実行することです。


node . normalize()
単独のTextノードを削除し、残りの連続した単独のTextノードデータを最初のそのノードに連結します。

normalize()メソッドの手順は、thisの各子孫単独のTextノードnodeについて次の手順を実行することです:

  1. lengthnode長さとする。
  2. もしlengthが0なら、nodeを削除し、次の単独のTextノードに進む。
  3. datanode連続した単独のTextノード(自身を除く)のデータ連結ツリー順)とする。
  4. データ置換をノードnode、offset length、count 0、データdataで実行する。
  5. currentNodenode次の兄弟とする。
  6. while currentNode単独のTextノードである間:

    1. ライブレンジで、開始ノードcurrentNodeであるものについて、開始オフセットlengthを加算し、開始ノードをnodeに設定する。

    2. ライブレンジで、終了ノードcurrentNodeであるものについて、終了オフセットlengthを加算し、終了ノードをnodeに設定する。

    3. ライブレンジで、開始ノードがcurrentNodeで、開始オフセットがcurrentNodeインデックスと一致するものについて、開始ノードをnode、開始オフセットをlengthに設定する。

    4. ライブレンジで、終了ノードがcurrentNodeで、終了オフセットがcurrentNodeインデックスと一致するものについて、終了ノードをnode、終了オフセットをlengthに設定する。

    5. currentNode長さlengthに加算する。

    6. currentNodeをその次の兄弟に設定する。

  7. nodeを削除node連続した単独のTextノード(自身を除く)をツリー順で削除する。

node . cloneNode([subtree = false])
nodeのコピーを返します。subtreeがtrueならコピーはnode子孫も含みます。
node . isEqualNode(otherNode)
nodeotherNodeが同じプロパティを持つかを返します。
仕様は、すべてまたは一部のノードに対して クローン手順 を定義することができます。アルゴリズムには、nodecopysubtreeノードをクローンするアルゴリズムで示されるように渡されます。

HTML では、クローン手順が、 inputscripttemplateなどの 複数の要素に対して定義されています。 SVG も自身の script 要素について同様に定義すべきですが、現在は定義されていません。

ノードの複製は、ノードnodeと、オプションでドキュメントdocument(デフォルトはnodeノード文書)、boolean型subtree(デフォルトfalse)、ノードまたはnull型parent(デフォルトnull)、nullまたは CustomElementRegistry オブジェクト型fallbackRegistry(デフォルトnull)で実行します:

  1. 確認nodeドキュメントでないか、nodedocumentであること。

  2. copynodedocumentfallbackRegistry単一ノード複製した結果とする。

  3. nodeに対して他の仕様で定義された複製手順nodecopysubtreeを渡して実行する。

  4. parentがnullでなければ、appendcopyparentに追加する。

  5. subtreeがtrueなら、nodechildについて、ツリー順で、ノードの複製childに対して、documentdocumentsubtreesubtreeparentcopyfallbackRegistryfallbackRegistryを指定して実行する。

  6. node要素であり、nodeシャドウホストで、nodeシャドウルート複製可能がtrueなら:

    1. 確認copyシャドウホストでないこと。

    2. shadowRootRegistrynodeシャドウルートカスタム要素レジストリとする。

    3. もしshadowRootRegistryグローバルカスタム要素レジストリなら、 shadowRootRegistrydocument有効なグローバルカスタム要素レジストリに設定する。

    4. シャドウルートの付加copynodeシャドウルートmode、true、nodeシャドウルートserializablenodeシャドウルートdelegates focusnodeシャドウルートslot assignmentshadowRootRegistryで実行する。

    5. copyシャドウルートdeclarativenodeシャドウルートdeclarativeに設定する。

    6. nodeシャドウルートchildについて、ツリー順で、ノードの複製childに対して documentdocumentsubtreesubtreeparentcopyシャドウルートを指定して実行する。

      これは意図的にfallbackRegistry引数を渡しません。

  7. copyを返す。

単一ノード複製は、ノードnodeドキュメントdocument、nullまたはCustomElementRegistryfallbackRegistryで実行します:

  1. copyをnullとする。

  2. もしnode要素であれば:

    1. registrynodeカスタム要素レジストリとする。

    2. もしregistryがnullなら、registryfallbackRegistryを設定する。

    3. もしregistryグローバルカスタム要素レジストリなら、registrydocument有効なグローバルカスタム要素レジストリに設定する。

    4. copy要素生成の結果とし、documentnodeローカル名node名前空間node名前空間接頭辞nodeis、false、registryを渡す。

    5. attributeについてnode属性リストを繰り返す:

      1. copyAttributeattributedocument、nullで単一ノード複製した結果とする。

      2. appendcopyAttributecopyに追加する。

  3. それ以外の場合、copynodeimplementsするインターフェースと同じものを実装し、かつ以下の追加要件を満たすノードとする。interface nodeimplementsする型によって切り替える:

    Document
    1. copyエンコーディングコンテントタイプURLオリジンモード宣言的シャドウルート許可nodeと同じ値に設定する。

    2. もしnodeカスタム要素レジストリis scopedがtrueなら、copyカスタム要素レジストリnodeカスタム要素レジストリを設定する。

    DocumentType

    copynamepublic IDsystem IDnodeと同じ値に設定する。

    Attr

    copy名前空間名前空間接頭辞ローカル名nodeと同じ値に設定する。

    Text
    Comment

    copyデータnodeと同じ値に設定する。

    ProcessingInstruction

    copytargetデータnodeと同じ値に設定する。

    その他

    何もしない。

  4. 確認copyノードであること。

  5. もしnodeドキュメントなら、documentcopyを設定する。

  6. copyノード文書documentを設定する。

  7. copyを返す。

cloneNode(subtree)メソッドの手順は以下の通りです:

  1. thisシャドウルートなら、NotSupportedErrorDOMException)を投げる。

  2. ノードの複製thissubtreesubtreeを指定して実行し、その結果を返す。

ノードA等しいのは、 ノードBについて、以下全ての条件を満たす場合です:

isEqualNode(otherNode) メソッドの手順は、 otherNode が null でなく、 thisotherNode と等しい 場合は true を返し、そうでなければ false を返す。

isSameNode(otherNode)メソッドの手順は、 otherNodethisならtrue、そうでなければfalseを返すことです。


node . compareDocumentPosition(other)
othernodeに対してどの位置にあるかを示すビットマスクを返します。設定されうるビットは以下の通りです:
Node . DOCUMENT_POSITION_DISCONNECTED (1)
nodeotherが同じツリーに属していない場合に設定されます。
Node . DOCUMENT_POSITION_PRECEDING (2)
othernodeより先行している場合に設定されます。
Node . DOCUMENT_POSITION_FOLLOWING (4)
othernodeより後続している場合に設定されます。
Node . DOCUMENT_POSITION_CONTAINS (8)
othernode祖先である場合に設定されます。
Node . DOCUMENT_POSITION_CONTAINED_BY (16, 10進数で16、16進数で10)
othernode子孫である場合に設定されます。
node . contains(other)
othernode包括的子孫であればtrue、それ以外(nullを含む)はfalseを返します。

これらはcompareDocumentPosition() がマスクとして返す定数です:

compareDocumentPosition(other) メソッドの手順は以下の通りです:

  1. thisotherと同一なら、0を返す。

  2. node1othernode2thisとする。

  3. attr1attr2をnullとする。

  4. もしnode1属性なら、attr1node1を設定し、node1attr1要素に設定する。

  5. もしnode2属性なら:

    1. attr2node2を設定し、node2attr2要素に設定する。

    2. もしattr1node1がnullでなく、かつnode2node1なら:

      1. attrについて、node2属性リストを繰り返す:

        1. もし attrattr1等しい なら、 DOCUMENT_POSITION_IMPLEMENTATION_SPECIFICDOCUMENT_POSITION_PRECEDING を加算した結果を返す。

        2. もし attrattr2等しい なら、 DOCUMENT_POSITION_IMPLEMENTATION_SPECIFICDOCUMENT_POSITION_FOLLOWING を加算した結果を返す。

  6. もしnode1またはnode2がnull、またはnode1ルートnode2ルートでない場合、 DOCUMENT_POSITION_DISCONNECTEDDOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC、 さらにDOCUMENT_POSITION_PRECEDING またはDOCUMENT_POSITION_FOLLOWING のいずれかを加算した結果を返す(どちらを返すかは一貫性を保つこと)。

    どちらを返すかは通常ポインタ比較等で実装されます。JavaScriptの実装ではキャッシュされたMath.random()値を使うこともできます。

  7. もしnode1node2祖先で、attr1がnull、またはnode1node2かつattr2がnullでない場合、 DOCUMENT_POSITION_CONTAINSDOCUMENT_POSITION_PRECEDING を加算した結果を返す。

  8. もしnode1node2子孫で、attr2がnull、またはnode1node2かつattr1がnullでない場合、 DOCUMENT_POSITION_CONTAINED_BYDOCUMENT_POSITION_FOLLOWING を加算した結果を返す。

  9. もしnode1node2より先行していれば、 DOCUMENT_POSITION_PRECEDINGを返す。

    このアルゴリズムで属性の扱い方により、属性はそのノードのより先行扱いになりますが、属性は同じツリーには参加しません。

  10. DOCUMENT_POSITION_FOLLOWINGを返す。

contains(other)メソッドの手順は、 other包括的子孫であればtrue、それ以外(null含む)はfalseを返すことです。


名前空間プレフィックスを特定するelementに対してnamespaceで行うには、以下の手順を実行します:

  1. element名前空間namespaceであり、 名前空間プレフィックスがnullでなければ、 その名前空間プレフィックスを返す。

  2. element持つ属性のうち、 名前空間プレフィックスが"xmlns"で、 namespaceである属性があれば、 その最初の属性のローカル名を返す。

  3. element親要素がnullでなければ、 その要素に対して 名前空間プレフィックスを特定するnamespaceで実行した結果を返す。

  4. nullを返す。

名前空間を特定するは、 nodeに対しprefixを使い、interface nodeimplementsする型によって分岐します:

Element
  1. prefixが"xml"なら、XML名前空間を返す。

  2. prefixが"xmlns"なら、XMLNS名前空間を返す。

  3. 自身の名前空間がnullでなく、 名前空間プレフィックスprefixなら 名前空間を返す。

  4. 属性のうち名前空間XMLNS名前空間で、名前空間プレフィックスが"xmlns"で、 ローカル名prefixであるものがある場合、 またはprefixがnullで、名前空間XMLNS名前空間で、名前空間プレフィックスがnull、かつローカル名が"xmlns"の属性がある場合、 そのが空文字列でなければ返し、そうでなければnullを返す。

  5. 親要素がnullならnullを返す。

  6. 親要素に対してprefix名前空間を特定するを実行した結果を返す。

Document
  1. 自身の文書要素がnullならnullを返す。

  2. 自身の文書要素に対して prefix名前空間を特定するを実行した結果を返す。

DocumentType
DocumentFragment

nullを返す。

Attr
  1. 自身の要素がnullならnullを返す。

  2. 自身の要素に対してprefix名前空間を特定するを実行した結果を返す。

その他
  1. 自身の親要素がnullならnullを返す。

  2. 自身の親要素に対してprefix名前空間を特定するを実行した結果を返す。

lookupPrefix(namespace)メソッドの手順は:

  1. namespaceがnullまたは空文字ならnullを返す。

  2. interface thisimplementsする型によって分岐する:

    Element

    名前空間プレフィックスを特定するthisnamespaceで実行した結果を返す。

    Document
    1. this文書要素がnullならnullを返す。

    2. 名前空間プレフィックスを特定するthis文書要素namespaceで実行した結果を返す。

    DocumentType
    DocumentFragment

    nullを返す。

    Attr
    1. this要素がnullならnullを返す。

    2. 名前空間プレフィックスを特定するthis要素namespaceで実行した結果を返す。

    その他
    1. this親要素がnullならnullを返す。

    2. 名前空間プレフィックスを特定するthis親要素namespaceで実行した結果を返す。

lookupNamespaceURI(prefix)メソッドの手順は:

  1. prefixが空文字ならnullに設定する。

  2. 名前空間を特定するthisprefixで実行した結果を返す。

isDefaultNamespace(namespace)メソッドの手順は:

  1. namespaceが空文字ならnullに設定する。

  2. defaultNamespace名前空間を特定するthisにnullで実行した結果とする。

  3. defaultNamespacenamespaceと同じならtrue、そうでなければfalseを返す。


insertBefore(node, child) メソッドの手順は、node事前挿入としてthischildの前に挿入した結果を返すことです。

appendChild(node)メソッドの手順は、 node追加としてthisに追加した結果を返すことです。

replaceChild(node, child) メソッドの手順は、置換としてchildnodethis内で置換した結果を返すことです。

removeChild(child)メソッドの手順は、 child事前削除としてthisから削除した結果を返すことです。


qualifiedNameがqualifiedNameの要素リストrootノード)に対して取得するアルゴリズムは以下です:

  1. qualifiedNameがU+002A(*)なら、rootをルートとし、フィルタが子孫要素のみに一致するHTMLCollectionを返す。

  2. そうでなく、rootノード文書HTMLドキュメントなら、 rootをルートとし、フィルタが以下の子孫要素に一致するHTMLCollectionを返す:

  3. そうでなければ、rootをルートとし、フィルタが子孫要素で、 修飾名qualifiedNameのものに一致する HTMLCollectionを返す。

同じ引数で呼び出した場合、かつrootノード文書が変更されていなければ、同じHTMLCollectionオブジェクトが返されることがあります。

namespaceがnamespace、localNameがlocalNameの要素リストrootノード)に対して取得するアルゴリズムは以下です:

  1. namespaceが空文字ならnullに設定する。

  2. namespacelocalNameが両方U+002A(*)なら、 rootをルートとし、フィルタが子孫要素に一致するHTMLCollectionを返す。

  3. namespaceがU+002A(*)なら、 rootをルートとし、フィルタが子孫要素でローカル名がlocalNameのものに一致するHTMLCollectionを返す。

  4. localNameがU+002A(*)なら、 rootをルートとし、フィルタが子孫要素で名前空間がnamespaceのものに一致するHTMLCollectionを返す。

  5. rootをルートとし、フィルタが子孫要素で名前空間がnamespace・ローカル名がlocalNameのものに一致するHTMLCollectionを返す。

同じ引数で呼び出した場合、同じHTMLCollectionオブジェクトが返されることがあります。

classNamesがclassNamesの要素リストrootノード)に対して取得するアルゴリズムは以下です:

  1. classesclassNamesに対して順序付き集合パーサーを実行した結果とする。
  2. classesが空集合なら、空のHTMLCollectionを返す。
  3. rootをルートとし、フィルタが子孫要素のうち、そのすべてのクラスclassesに含まれているものに一致するHTMLCollectionを返す。

    そのクラスの比較は、rootノード文書モードが"quirks"ならASCII大文字小文字無視、それ以外は完全一致で行うこと。

同じ引数で呼び出した場合、同じHTMLCollectionオブジェクトが返されることがあります。

4.5. インターフェース Document

[Exposed=Window]
interface Document : Node {
  constructor();

  [SameObject] readonly attribute DOMImplementation implementation;
  readonly attribute USVString URL;
  readonly attribute USVString documentURI;
  readonly attribute DOMString compatMode;
  readonly attribute DOMString characterSet;
  readonly attribute DOMString charset; // legacy alias of .characterSet
  readonly attribute DOMString inputEncoding; // legacy alias of .characterSet
  readonly attribute DOMString contentType;

  readonly attribute DocumentType? doctype;
  readonly attribute Element? documentElement;
  HTMLCollection getElementsByTagName(DOMString qualifiedName);
  HTMLCollection getElementsByTagNameNS(DOMString? namespace, DOMString localName);
  HTMLCollection getElementsByClassName(DOMString classNames);

  [CEReactions, NewObject] Element createElement(DOMString localName, optional (DOMString or ElementCreationOptions) options = {});
  [CEReactions, NewObject] Element createElementNS(DOMString? namespace, DOMString qualifiedName, optional (DOMString or ElementCreationOptions) options = {});
  [NewObject] DocumentFragment createDocumentFragment();
  [NewObject] Text createTextNode(DOMString data);
  [NewObject] CDATASection createCDATASection(DOMString data);
  [NewObject] Comment createComment(DOMString data);
  [NewObject] ProcessingInstruction createProcessingInstruction(DOMString target, DOMString data);

  [CEReactions, NewObject] Node importNode(Node node, optional (boolean or ImportNodeOptions) options = false);
  [CEReactions] Node adoptNode(Node node);

  [NewObject] Attr createAttribute(DOMString localName);
  [NewObject] Attr createAttributeNS(DOMString? namespace, DOMString qualifiedName);

  [NewObject] Event createEvent(DOMString interface); // legacy

  [NewObject] Range createRange();

  // NodeFilter.SHOW_ALL = 0xFFFFFFFF
  [NewObject] NodeIterator createNodeIterator(Node root, optional unsigned long whatToShow = 0xFFFFFFFF, optional NodeFilter? filter = null);
  [NewObject] TreeWalker createTreeWalker(Node root, optional unsigned long whatToShow = 0xFFFFFFFF, optional NodeFilter? filter = null);
};

[Exposed=Window]
interface XMLDocument : Document {};

dictionary ElementCreationOptions {
  CustomElementRegistry customElementRegistry;
  DOMString is;
};

dictionary ImportNodeOptions {
  CustomElementRegistry customElementRegistry;
  boolean selfOnly = false;
};

Document ノードは単にドキュメントと呼ばれます。

ドキュメントノード文書は自身です。

ドキュメントには、 エンコーディングエンコーディング)、 コンテントタイプ(文字列)、 URLURL)、 オリジンオリジン)、 ("xml"または"html")、 モード("no-quirks"、"quirks"、"limited-quirks"のいずれか)、 宣言的シャドウルート許可(boolean)、 カスタム要素レジストリ(nullまたはCustomElementRegistry オブジェクト)が関連付けられます。 [ENCODING] [URL] [HTML]

特に明記されていない限り、ドキュメントエンコーディングutf-8 エンコーディングコンテントタイプは "application/xml"、 URLは "about:blank"、 オリジン不透明なオリジンは "xml"、 モードは "no-quirks"、 宣言的シャドウルート許可はfalse、 カスタム要素レジストリはnullです。

ドキュメントは、 が"xml"なら XMLドキュメントと呼ばれ、 それ以外はHTMLドキュメントと呼ばれます。 ドキュメントHTMLドキュメントXMLドキュメントかによって、 一部APIの挙動が変わります。

ドキュメントno-quirksモードモードが"no-quirks")、 quirksモードモードが"quirks")、 limited-quirksモードモードが"limited-quirks")と呼ばれます。

モードは、 ドキュメントHTMLパーサでDOCTYPE文字列の有無や値によって作成された場合、 また新しい閲覧コンテキスト(初期"about:blank")によってのみデフォルトから変更されます。[HTML]

no-quirksモードは元々「standards mode」と呼ばれており、 limited-quirksモードは「almost standards mode」と呼ばれていましたが、 詳細が標準で定義されるようになったため改名されました。(Ian Hicksonが「意味がない」として元の名前を却下したことも理由です。)

ドキュメント親取得アルゴリズムは、 eventtype属性値"load"の場合、 またはドキュメント閲覧コンテキストを持たない場合はnullを返し、 それ以外はドキュメント関連グローバルオブジェクトを返します。


document = new Document()
新しいドキュメントを返します。
document . implementation
documentDOMImplementation オブジェクトを返します。
document . URL
document . documentURI
documentURLを返します。
document . compatMode
documentモードが"quirks"なら文字列"BackCompat"、それ以外は"CSS1Compat"を返します。
document . characterSet
documentエンコーディングを返します。
document . contentType
documentコンテントタイプを返します。

new Document() コンストラクタの手順は、thisオリジンオリジンである 現在のグローバルオブジェクト関連付けられたDocumentのものに設定することです。[HTML]

createDocument()とは異なり、 このコンストラクタは XMLDocument オブジェクトではなく、ドキュメントDocument オブジェクト)を返します。

implementationゲッターの手順は、 thisに関連付けられたDOMImplementation オブジェクトを返すことです。

URLおよび documentURIゲッターの手順は、 thisURL直列化済み)を返すことです。

compatModeゲッターの手順は、 thisモードが"quirks"なら"BackCompat"、 それ以外なら"CSS1Compat"を返すことです。

characterSetcharsetinputEncodingゲッターの手順は、 thisエンコーディング名前を返すことです。

contentTypeゲッターの手順は、 thisコンテントタイプを返すことです。


document . doctype
doctypeを返します。存在しない場合はnullを返します。
document . documentElement
文書要素を返します。
collection = document . getElementsByTagName(qualifiedName)

qualifiedNameが"*"の場合、すべての子孫要素HTMLCollectionを返します。

それ以外の場合は、すべての子孫 要素のうち 修飾名qualifiedNameであるもののHTMLCollectionを返します。 (HTMLドキュメントHTML名前空間内の要素については大文字小文字を区別せずに一致します。)

collection = document . getElementsByTagNameNS(namespace, localName)

namespacelocalNameが両方"*"の場合、すべての子孫要素HTMLCollectionを返します。

namespaceのみが"*"の場合、すべての子孫要素のうち ローカル名localNameであるもののHTMLCollectionを返します。

localNameのみが"*"の場合、すべての子孫要素のうち 名前空間namespaceであるもののHTMLCollectionを返します。

それ以外の場合、すべての子孫 要素のうち 名前空間namespaceローカル名localNameであるもののHTMLCollectionを返します。

collection = document . getElementsByClassName(classNames)
collection = element . getElementsByClassName(classNames)

このメソッドが呼び出された対象(ドキュメントまたは要素)内で、classNamesで指定されたすべてのクラスを持つ要素HTMLCollectionを返します。classNames引数は空白区切りのクラス名リストとして解釈されます。

doctypeゲッターの手順は、thisのうちdoctypeであるものを返し、なければnullを返すことです。

documentElementゲッターの手順は、this文書要素を返すことです。

getElementsByTagName(qualifiedName) メソッドの手順は、修飾名がqualifiedNameの要素リストthisで取得して返すことです。

したがって、HTMLドキュメントでは、 document.getElementsByTagName("FOO")HTML名前空間ではない<FOO>要素と、 HTML名前空間<foo>要素には一致しますが、 HTML名前空間<FOO>要素には一致しません。

getElementsByTagNameNS(namespace, localName) メソッドの手順は、namespaceがnamespaceかつlocalNameがlocalNameの要素リストthisで取得して返すことです。

getElementsByClassName(classNames) メソッドの手順は、classNamesがclassNamesの要素リストthisで取得して返すことです。

次のXHTML断片が与えられたとします:
<div id="example">
  <p id="p1" class="aaa bbb"/>
  <p id="p2" class="aaa ccc"/>
  <p id="p3" class="bbb ccc"/>
</div>

document.getElementById("example").getElementsByClassName("aaa") の呼び出しは、HTMLCollection を返し、その中には2つの段落 p1p2 が含まれる。

getElementsByClassName("ccc bbb") の呼び出しは、ただ1つのノード、つまり p3 のみを返す。一方、 document.getElementById("example").getElementsByClassName("bbb ccc ") の呼び出しでも同じ結果が返る。

getElementsByClassName("aaa,bbb") の呼び出しは、ノードを何も返さない。上記の要素のいずれも aaa,bbb クラスには属していないためである。


element = document . createElement(localName [, options])

localNameをローカル名とする要素を返します (documentHTMLドキュメントの場合、localNameは小文字化されます)。 要素名前空間は、 documentHTMLドキュメントまたは documentコンテントタイプが"application/xhtml+xml"の場合はHTML名前空間、それ以外はnullです。

optionscustomElementRegistry が指定された場合は、 CustomElementRegistryを設定できます。

optionsis が指定された場合はカスタマイズされた組み込み要素を作成できます。

localName有効な要素ローカル名でない場合は "InvalidCharacterError" DOMException が投げられます。

optionscustomElementRegistryis の両方が指定された場合は "NotSupportedError" DOMException が投げられます。

element = document . createElementNS(namespace, qualifiedName [, options])

要素を返します。 名前空間namespaceです。 名前空間プレフィックスqualifiedNameのU+003A (:)より前の部分か、なければnullとなります。 ローカル名はU+003A (:)より後の部分かqualifiedNameそのものです。

optionscustomElementRegistry が指定された場合は、 CustomElementRegistryを設定できます。

optionsis が指定された場合はカスタマイズされた組み込み要素を作成できます。

qualifiedNameが(プレフィックス付きも含めて)有効な要素ローカル名でない場合は "InvalidCharacterError" DOMException が投げられます。

以下のいずれかの場合は "NamespaceError" DOMException が投げられます:

optionscustomElementRegistryis の両方が指定された場合は "NotSupportedError" DOMException が投げられます。

documentFragment = document . createDocumentFragment()
DocumentFragment ノードを返します。
text = document . createTextNode(data)
Text ノードデータdata)を返します。
text = document . createCDATASection(data)
CDATASection ノードデータdata)を返します。
comment = document . createComment(data)
Comment ノードデータdata)を返します。
processingInstruction = document . createProcessingInstruction(target, data)
ProcessingInstruction ノードtargettargetdatadata)を返します。 targetName 生成規則に一致しない場合、 "InvalidCharacterError" DOMException が投げられます。 dataに"?>"が含まれている場合も "InvalidCharacterError" DOMException が投げられます。

要素インターフェースは、namenamespaceに対して特に指定がない限り Element です。

HTML標準では、例えばhtmlHTML名前空間の場合は HTMLHtmlElement インターフェースが使用されることが定義されています。[HTML]

createElement(localName, options) メソッドの手順は以下の通りです:

  1. localName有効な要素ローカル名でない場合は InvalidCharacterErrorInvalidCharacterErrorDOMException)を投げる。

  2. thisHTMLドキュメントの場合、localNameをASCII小文字化する。

  3. registryisoptionsthis要素生成オプションを平坦化するで取得する。

  4. namespaceを、HTML名前空間とし、 thisHTMLドキュメントまたは thisコンテントタイプが"application/xhtml+xml"の場合はHTML名前空間、それ以外はnull。

  5. 要素生成thislocalNamenamespace、null、is、true、registryで実行した結果を返す。

内部 createElementNS 手順は、documentnamespacequalifiedNameoptionsを受け取って以下の手順を実行します:

  1. namespace, prefix, localName)を、"element"を与えてnamespacequalifiedName検証・抽出した結果とする。

  2. registryisを、optionsthis要素生成オプションの平坦化を行った結果とする。

  3. 要素生成documentlocalNamenamespaceprefixis、true、registryで実行した結果を返す。

createElementNS(namespace, qualifiedName, options) メソッドの手順は、内部 createElementNS 手順thisnamespacequalifiedNameoptionsで実行した結果を返すことです。

要素生成オプションの平坦化は、文字列または ElementCreationOptions 辞書optionsdocument documentを受け取って以下の手順を実行します:

  1. registryをnullにする。

  2. isをnullにする。

  3. optionsが辞書なら:

    1. options["customElementRegistry"] が存在する場合、registryにその値を設定する。

    2. registryis scopedがfalseであり、かつregistrydocumentカスタム要素レジストリでない場合、 NotSupportedErrorNotSupportedErrorDOMException)を投げる。

    3. options["is"] が存在する場合、isにその値を設定する。

    4. registryがnullでなく、かつisがnullでない場合は NotSupportedErrorNotSupportedErrorDOMException)を投げる。

  4. registryがnullなら、documentを引数として カスタム要素レジストリの検索を実行した結果をregistryに設定する。

  5. registryisを返す。

createElement() および createElementNS()options パラメータは、Web互換性のため文字列も許容されます。

createDocumentFragment()メソッドの手順は、新しいDocumentFragment ノードノード文書this)を返すことです。

createTextNode(data)メソッドの手順は、新しいText ノードデータdataノード文書this)を返すことです。

createCDATASection(data)メソッドの手順は以下の通りです:

  1. thisHTMLドキュメントなら NotSupportedError "NotSupportedError" DOMException を投げる。

  2. dataに文字列"]]>"が含まれていれば InvalidCharacterError "InvalidCharacterError" DOMException を投げる。

  3. 新しいCDATASection ノードデータdataノード文書this)を返す。

createComment(data)メソッドの手順は、新しいComment ノードデータdataノード文書this)を返すことです。

createProcessingInstruction(target, data) メソッドの手順は以下の通りです:

  1. targetName生成規則に一致しない場合、 InvalidCharacterError "InvalidCharacterError" DOMException を投げる。
  2. dataに"?>"が含まれていれば InvalidCharacterError "InvalidCharacterError" DOMException を投げる。
  3. 新しいProcessingInstruction ノードtargettargetdatadataノード文書this)を返す。

clone = document . importNode(node [, options = false])

nodeのコピーを返します。optionsがtrue、またはoptionsが辞書でそのselfOnly がfalseの場合、コピーにはnode子孫も含まれます。

optionscustomElementRegistry を使って、 CustomElementRegistry が未設定な要素に設定することができます。

nodeドキュメントまたはシャドウルートの場合、 "NotSupportedError" DOMException が投げられます。

node = document . adoptNode(node)
nodeを他のドキュメントから移動し、返します。

nodeドキュメントの場合、 "NotSupportedError" DOMException が投げられるか、nodeシャドウルートの場合は "HierarchyRequestError" DOMException が投げられます。

importNode(node, options) メソッドの手順は以下の通りです:

  1. nodeドキュメントまたはシャドウルートなら NotSupportedError "NotSupportedError" DOMException を投げる。

  2. subtreeをfalseにする。

  3. registryをnullにする。

  4. optionsがbooleanならsubtreeoptionsを設定する。

  5. それ以外の場合:

    1. subtreeoptions["selfOnly"]の否定値を設定する。

    2. options["customElementRegistry"] が存在する場合、registryにその値を設定する。

    3. registryis scopedがfalseで、registrythisカスタム要素レジストリでない場合、 NotSupportedError "NotSupportedError" DOMException を投げる。

  6. registryがnullなら、カスタム要素レジストリの検索thisで実行した結果をregistryに設定する。

  7. ノードのクローンnodeに対して、documentthisを、 subtreesubtreeを、 fallbackRegistryregistryを設定して実行した結果を返す。

他の仕様は、すべてまたは一部のノードに対して採用手順を定義できます。 このアルゴリズムは、adoptアルゴリズム内で、nodeoldDocumentを受け取ります。

ノードの採用アルゴリズムは、nodedocumentに採用する際に以下の手順を実行します:

  1. oldDocumentnodeノード文書とする。

  2. nodeがnullでなければ、削除を行う。

  3. documentoldDocumentでない場合:

    1. nodeシャドウを含む包括的子孫それぞれについて:

      1. inclusiveDescendantノード文書documentに設定する。

      2. inclusiveDescendantシャドウルートかつ inclusiveDescendantカスタム要素レジストリグローバルカスタム要素レジストリなら、 inclusiveDescendantカスタム要素レジストリdocument有効なグローバルカスタム要素レジストリに設定する。

      3. それ以外で、inclusiveDescendant要素なら:

        1. inclusiveDescendant属性リスト内の各属性ノード文書documentに設定する。

        2. inclusiveDescendantカスタム要素レジストリグローバルカスタム要素レジストリなら、 inclusiveDescendantカスタム要素レジストリdocument有効なグローバルカスタム要素レジストリに設定する。

    2. nodeシャドウを含む包括的子孫のうちカスタムなものそれぞれについて、 カスタム要素コールバックreactionのキューinclusiveDescendant、コールバック名"adoptedCallback"、« oldDocument, document »で実行する。

    3. nodeシャドウを含む包括的子孫それぞれについて、 シャドウを含む木順採用手順inclusiveDescendantoldDocumentで実行する。

adoptNode(node)メソッドの手順は以下の通りです:

  1. nodeドキュメントなら NotSupportedError "NotSupportedError" DOMException を投げる。

  2. nodeシャドウルートなら HierarchyRequestError "HierarchyRequestError" DOMException を投げる。

  3. nodeDocumentFragment ノードであり、 hostがnullでなければ、returnする。

  4. 採用 nodethisに対して実行する。

  5. nodeを返す。


NullまたはCustomElementRegistry オブジェクトregistry が非nullかつregistryis scopedがfalseなら グローバルカスタム要素レジストリであるとする。

ドキュメント document有効なグローバルカスタム要素レジストリは:

  1. documentカスタム要素レジストリグローバルカスタム要素レジストリなら documentカスタム要素レジストリを返す。

  2. nullを返す。


createAttribute(localName)メソッドの手順は以下の通りです:

  1. localName有効な属性ローカル名でない場合、 InvalidCharacterError "InvalidCharacterError" DOMException を投げる。

  2. thisHTMLドキュメントなら localNameをASCII小文字化する。
  3. 新しい属性ローカル名localNameノード文書this)を返す。

createAttributeNS(namespace, qualifiedName) メソッドの手順は以下の通りです:

  1. namespace, prefix, localName)を、"attribute"を与えてnamespacequalifiedName検証・抽出した結果とする。

  2. 新しい属性名前空間namespace名前空間プレフィックスprefixローカル名localNameノード文書this)を返す。


createEvent(interface)メソッドの手順は以下の通りです:

  1. constructorをnullにする。

  2. interfaceが次の表の1列目のいずれかの文字列とASCII大文字小文字無視で一致する場合、同じ行の2列目のインターフェースをconstructorに設定する:

    文字列 インターフェース 備考
    "beforeunloadevent" BeforeUnloadEvent [HTML]
    "compositionevent" CompositionEvent [UIEVENTS]
    "customevent" CustomEvent
    "devicemotionevent" DeviceMotionEvent [DEVICE-ORIENTATION]
    "deviceorientationevent" DeviceOrientationEvent
    "dragevent" DragEvent [HTML]
    "event" Event
    "events"
    "focusevent" FocusEvent [UIEVENTS]
    "hashchangeevent" HashChangeEvent [HTML]
    "htmlevents" Event
    "keyboardevent" KeyboardEvent [UIEVENTS]
    "messageevent" MessageEvent [HTML]
    "mouseevent" MouseEvent [UIEVENTS]
    "mouseevents"
    "storageevent" StorageEvent [HTML]
    "svgevents" Event
    "textevent" TextEvent [UIEVENTS]
    "touchevent" TouchEvent [TOUCH-EVENTS]
    "uievent" UIEvent [UIEVENTS]
    "uievents"
  3. constructorがnullなら NotSupportedError "NotSupportedError" DOMException を投げる。

  4. constructorで示されるインターフェースがthisの関連グローバルオブジェクトに公開されていない場合、 NotSupportedError "NotSupportedError" DOMException を投げる。

    通常、ユーザーエージェントは特定の設定でタッチイベントのサポートを無効化している場合があり、その場合この条件によって TouchEvent インターフェースが対象になります。

  5. eventconstructorに与えてイベント生成を実行した結果とする。

  6. eventtype 属性を空文字列に初期化する。

  7. eventtimeStamp 属性を現在の高精度タイムthis関連グローバルオブジェクトで呼び出した結果に初期化する。

  8. eventisTrusted 属性をfalseに初期化する。

  9. eventinitialized flagを解除する。

  10. eventを返す。

Event のコンストラクタを使うべきです。


createRange()メソッドの手順は、新しい ライブレンジを(this, 0)を 開始および 終了として返すことです。

Range() コンストラクタも代わりに利用できます。


createNodeIterator(root, whatToShow, filter) メソッドの手順は以下の通りです:

  1. iteratorを新しいNodeIterator オブジェクトとする。

  2. iteratorrootおよびiteratorreferencerootに設定する。

  3. iteratorpointer before referenceをtrueに設定する。

  4. iteratorwhatToShowwhatToShowに設定する。

  5. iteratorfilterfilterに設定する。

  6. iteratorを返す。

createTreeWalker(root, whatToShow, filter) メソッドの手順は以下の通りです:

  1. walkerを新しいTreeWalker オブジェクトとする。

  2. walkerrootおよびwalkercurrentrootに設定する。

  3. walkerwhatToShowwhatToShowに設定する。

  4. walkerfilterfilterに設定する。

  5. walkerを返す。

4.5.1. インターフェース DOMImplementation

ユーザーエージェントはドキュメントが 作成されるたびにDOMImplementation オブジェクトを生成し、そのドキュメントに関連付けなければならない。

[Exposed=Window]
interface DOMImplementation {
  [NewObject] DocumentType createDocumentType(DOMString name, DOMString publicId, DOMString systemId);
  [NewObject] XMLDocument createDocument(DOMString? namespace, [LegacyNullToEmptyString] DOMString qualifiedName, optional DocumentType? doctype = null);
  [NewObject] Document createHTMLDocument(optional DOMString title);

  boolean hasFeature(); // useless; always returns true
};
doctype = document . implementation . createDocumentType(name, publicId, systemId)
指定されたnamepublicIdsystemIddoctypeを返します。

name有効なドキュメント型名でない場合、"InvalidCharacterError" DOMException が投げられます。

doc = document . implementation . createDocument(namespace, qualifiedName [, doctype = null])
XMLDocumentを返します。 文書要素ローカル名qualifiedNameで、 名前空間namespacequalifiedNameが空文字列でない場合)となります。また、doctypeが指定されていればそのdoctypeも持ちます。

このメソッドはcreateElementNS() メソッドと同じ例外を、namespacequalifiedNameを指定した場合に投げます。

doc = document . implementation . createHTMLDocument([title])
documentを返します。 基本的なツリーが既に構築されており、 title 要素も含まれます(title引数が省略された場合を除く)。

createDocumentType(name, publicId, systemId) メソッドの手順は以下の通りです:

  1. name有効なドキュメント型名でない場合、"InvalidCharacterError" DOMException を投げる。

  2. 新しいdoctypeを返す。その namenamepublic IDpublicIdsystem IDsystemIdノード文書documentthisに関連付けられたもの)に設定する。

createDocument(namespace, qualifiedName, doctype) メソッドの手順は以下の通りです:

  1. documentを新しいXMLDocumentとする。

  2. elementをnullとする。

  3. qualifiedNameが空文字列でなければ、element内部createElementNS手順documentnamespacequalifiedName、空の辞書で実行した結果を設定する。

  4. doctypeが非nullなら、追加doctypedocumentに追加する。

  5. elementが非nullなら、追加elementdocumentに追加する。

  6. documentオリジンthisに関連付けられたdocumentオリジンとする。

  7. documentコンテントタイプnamespaceによって決定される:

    HTML名前空間
    application/xhtml+xml
    SVG名前空間
    image/svg+xml
    その他の名前空間
    application/xml
  8. documentを返す。

createHTMLDocument(title) メソッドの手順は以下の通りです:

  1. docを新しいdocumentHTMLドキュメント)とする。

  2. docコンテントタイプを"text/html"に設定する。

  3. 新しいdoctypenameが"html"、ノード文書doc)をdocに追加する。

  4. doc要素生成doc、"html"、HTML名前空間)の結果を追加する。

  5. 先ほど生成したhtml要素に要素生成doc、"head"、HTML名前空間)の結果を追加する。

  6. titleが指定されていれば:

    1. 先ほど生成したhead要素に要素生成doc、"title"、HTML名前空間)の結果を追加する。

    2. 先ほど生成したtitle要素に、新しいText ノードdatatitle(空文字列もあり得る)、ノード文書doc)を追加する。

  7. 先ほど生成したhtml要素に要素生成doc、"body"、HTML名前空間)の結果を追加する。

  8. docオリジンthisに関連付けられたdocumentオリジンとする。

  9. docを返す。

hasFeature() メソッドの手順はtrueを返すことです。

hasFeature() は元々ユーザーエージェントが指定したDOM機能をサポートしているかどうか返す用途でしたが、実際にはオブジェクトや属性、メソッドの有無をチェックする方が信頼性が高く、細かい判定ができます。 そのため現在は使用されませんが、古いページが動作しなくならないように(常にtrueを返す)残されています。

4.6. インターフェース DocumentType

[Exposed=Window]
interface DocumentType : Node {
  readonly attribute DOMString name;
  readonly attribute DOMString publicId;
  readonly attribute DOMString systemId;
};

DocumentType ノードは単に doctypeとして知られています。

Doctypeには、 関連付けられた namepublic IDsystem ID があります。

Doctypeが作成されるとき、 nameは 必ず与えられます。Doctypeが作成される際に明示的に与えられない限り、 public IDsystem IDは 空文字列になります。

nameゲッター手順は、 thisnameを返すことです。

publicIdゲッター手順は、 thispublic IDを返すことです。

systemIdゲッター手順は、 thissystem IDを返すことです。

4.7. インターフェイス DocumentFragment

[Exposed=Window]
interface DocumentFragment : Node {
  constructor();
};

DocumentFragment ノードには、 関連付けられたhost(null もしくは別のノードツリー内の要素)があります。特別な記述がない限り、null です。

オブジェクト A がオブジェクト Bhost を含む包括的祖先 であるとは、A包括的祖先である場合、 または Brootが非 null のhostを持ち、 ABroothosthost を含む包括的祖先である場合です。

DocumentFragment ノードhostの概念は、 HTML のtemplate要素や シャドウルートに役立ち、 pre-insertおよび replace アルゴリズムにも影響します。

tree = new DocumentFragment()
新しいDocumentFragment ノードを返します。

new DocumentFragment() コンストラクタ手順は、thisノード文書現在のグローバルオブジェクト関連付けられたDocument に設定することです。

4.8. インターフェイス ShadowRoot

[Exposed=Window]
interface ShadowRoot : DocumentFragment {
  readonly attribute ShadowRootMode mode;
  readonly attribute boolean delegatesFocus;
  readonly attribute SlotAssignmentMode slotAssignment;
  readonly attribute boolean clonable;
  readonly attribute boolean serializable;
  readonly attribute Element host;

  attribute EventHandler onslotchange;
};

enum ShadowRootMode { "open", "closed" };
enum SlotAssignmentMode { "manual", "named" };

ShadowRoot ノードは単に シャドウルートとして知られています。

シャドウルートの関連付けられたhostは決して null になりません。

シャドウルートには、関連付けられたmode("open" または "closed")があります。

シャドウルートには、関連付けられたdelegates focus (真偽値)があります。初期値は false です。

シャドウルートには、関連付けられた element internals で利用可能(真偽値)があります。初期値は false です。

シャドウルートには、関連付けられたdeclarative (真偽値)があります。初期値は false です。

シャドウルートには、関連付けられたslot assignment ("manual" または "named")があります。

シャドウルートには、関連付けられたclonable(真偽値)があります。 初期値は false です。

シャドウルートには、関連付けられたserializable(真偽値)があります。 初期値は false です。

シャドウルートには、関連付けられたcustom element registry (null または CustomElementRegistry オブジェクト)があります。初期値は null です。

シャドウルートには、関連付けられた custom element registry を null のままにする(真偽値)があります。 初期値は false です。

これは declarative シャドウルートと組み合わせてのみ true になり得ます。また、シャドウルートcustom element registry が null の間だけ重要です。


シャドウルートget the parentアルゴリズムは、 eventが与えられた場合、 eventcomposed flagが解除されていて、シャドウルートeventpathの最初の構造体の invocation targetrootである場合は null を返し、 それ以外はシャドウルートhostを返します。


modeゲッター手順は、 thismodeを返すことです。

delegatesFocusゲッター手順は、 thisdelegates focusを返すことです。

slotAssignmentゲッター手順は、 thisslot assignmentを返すことです。

clonableゲッター手順は、 thisclonableを返すことです。

serializableゲッター手順は、 thisserializableを返すことです。

hostゲッター手順は、 thishostを返すことです。


onslotchange属性は、 イベントハンドラー IDL 属性であり、 onslotchangeイベントハンドラーのものであり、 イベントハンドラーイベントタイプslotchangeです。


シャドウを含むツリー順序は、 シャドウを含む事前順巡回・深さ優先探索による ノードツリーの順序です。 シャドウを含む事前順巡回・深さ優先探索は、 ノードツリー treeに対する事前順巡回・深さ優先探索であり、 tree内で見つかった各シャドウホストに対して、 その要素シャドウルートノードツリーを、その要素が見つかった直後に シャドウを含む事前順巡回・深さ優先探索します。

シャドウを含む rootは、オブジェクトの rootシャドウルートであれば、 そのhostシャドウを含む root、 それ以外の場合はそのrootです。

オブジェクト A がオブジェクト Bシャドウを含む子孫であるとは、 A子孫である場合、 または Arootシャドウルートであり、 Aroothostシャドウを含む包括的子孫である場合です。

シャドウを含む包括的子孫 とは、オブジェクト自身またはそのシャドウを含む子孫のいずれかです。

オブジェクト A がオブジェクト Bシャドウを含む祖先であるのは、 Bシャドウを含む子孫である場合に限ります。

シャドウを含む包括的祖先 とは、オブジェクト自身またはそのシャドウを含む祖先のいずれかです。

ノード Aclosed-shadow-hiddenであるのは、ノード Bについて、以下のすべての条件が真である場合です:

retargetとは、オブジェクトAをオブジェクト Bに対して次の手順を繰り返し、オブジェクトを返すまで実施することです:

  1. 以下のいずれかが真の場合

    この場合はAを返します。

  2. AAroothostに設定します。

retargeting アルゴリズムはイベント発行Fullscreenなど他の仕様で利用されます。[FULLSCREEN]

4.9. インターフェイス Element

[Exposed=Window]
interface Element : Node {
  readonly attribute DOMString? namespaceURI;
  readonly attribute DOMString? prefix;
  readonly attribute DOMString localName;
  readonly attribute DOMString tagName;

  [CEReactions] attribute DOMString id;
  [CEReactions] attribute DOMString className;
  [SameObject, PutForwards=value] readonly attribute DOMTokenList classList;
  [CEReactions, Unscopable] attribute DOMString slot;

  boolean hasAttributes();
  [SameObject] readonly attribute NamedNodeMap attributes;
  sequence<DOMString> getAttributeNames();
  DOMString? getAttribute(DOMString qualifiedName);
  DOMString? getAttributeNS(DOMString? namespace, DOMString localName);
  [CEReactions] undefined setAttribute(DOMString qualifiedName, DOMString value);
  [CEReactions] undefined setAttributeNS(DOMString? namespace, DOMString qualifiedName, DOMString value);
  [CEReactions] undefined removeAttribute(DOMString qualifiedName);
  [CEReactions] undefined removeAttributeNS(DOMString? namespace, DOMString localName);
  [CEReactions] boolean toggleAttribute(DOMString qualifiedName, optional boolean force);
  boolean hasAttribute(DOMString qualifiedName);
  boolean hasAttributeNS(DOMString? namespace, DOMString localName);

  Attr? getAttributeNode(DOMString qualifiedName);
  Attr? getAttributeNodeNS(DOMString? namespace, DOMString localName);
  [CEReactions] Attr? setAttributeNode(Attr attr);
  [CEReactions] Attr? setAttributeNodeNS(Attr attr);
  [CEReactions] Attr removeAttributeNode(Attr attr);

  ShadowRoot attachShadow(ShadowRootInit init);
  readonly attribute ShadowRoot? shadowRoot;

  readonly attribute CustomElementRegistry? customElementRegistry;

  Element? closest(DOMString selectors);
  boolean matches(DOMString selectors);
  boolean webkitMatchesSelector(DOMString selectors); // legacy alias of .matches

  HTMLCollection getElementsByTagName(DOMString qualifiedName);
  HTMLCollection getElementsByTagNameNS(DOMString? namespace, DOMString localName);
  HTMLCollection getElementsByClassName(DOMString classNames);

  [CEReactions] Element? insertAdjacentElement(DOMString where, Element element); // legacy
  undefined insertAdjacentText(DOMString where, DOMString data); // legacy
};

dictionary ShadowRootInit {
  required ShadowRootMode mode;
  boolean delegatesFocus = false;
  SlotAssignmentMode slotAssignment = "named";
  boolean clonable = false;
  boolean serializable = false;
  CustomElementRegistry? customElementRegistry = null;
};

ShadowRootInit はやや珍しく、undefinedおよびnullの両方を customElementRegistry メンバーに渡すことができ、Web 開発者が辞書ではなくShadowRoot ノードをattachShadow() に渡せるようにしています。

Element ノードは単に 要素として知られています。

要素には、次の関連付けられた値があります:

名前空間
null または空でない文字列。
名前空間接頭辞
null または空でない文字列。
ローカル名
空でない文字列。
カスタム要素レジストリ
null または CustomElementRegistry オブジェクト。
カスタム要素状態
"undefined", "failed", "uncustomized", "precustomized", または "custom"。
カスタム要素定義
null または カスタム要素定義
is
null または 有効なカスタム要素名

要素作成されるとき、 これらすべての値が 初期化されます。

要素カスタム要素状態が "uncustomized" または "custom" である場合、 定義済みとされます。要素カスタム要素状態が "custom" である場合、 カスタムとされます。

要素が定義済みかどうかは、 :defined 疑似クラスの挙動を決定するために使われます。要素がカスタムかどうかは mutation アルゴリズムの挙動を決定するために使われます。 "failed"および"precustomized"状態は、 カスタム要素コンストラクタが初回に正しく実行されない場合、 upgradeによって再度実行されないよう保証するために使われます。

以下のコードは、これら4つの状態それぞれの要素を示します:

<!DOCTYPE html>
<script>
  window.customElements.define("sw-rey", class extends HTMLElement {})
  window.customElements.define("sw-finn", class extends HTMLElement {}, { extends: "p" })
  window.customElements.define("sw-kylo", class extends HTMLElement {
    constructor() {
      // super() intentionally omitted for this example
    }
  })
</script>

<!-- "undefined" (未定義、カスタムでない) -->
<sw-han></sw-han>
<p is="sw-luke"></p>
<p is="asdf"></p>

<!-- "failed" (未定義、カスタムでない) -->
<sw-kylo></sw-kylo>

<!-- "uncustomized" (定義済み、カスタムでない) -->
<p></p>
<asdf></asdf>

<!-- "custom" (定義済み、カスタム) -->
<sw-rey></sw-rey>
<p is="sw-finn"></p>

要素にも、 関連付けられた シャドウルート(null または シャドウルート)があります。特別な記述がない限り null です。 要素は、 そのシャドウルートが null でない場合、 シャドウホストとされます。

要素qualified name(修飾名)は、 名前空間接頭辞が null の場合は ローカル名、 そうでなければ、 名前空間接頭辞、":"、そして ローカル名を順に連結したものです。

要素HTML大文字修飾名は、次の手順の戻り値です:

  1. qualifiedNamethis修飾名とする。

  2. thisHTML 名前空間にあり、その ノード文書HTML文書なら、 qualifiedNameASCII大文字に変換する。

  3. qualifiedName を返す。

ユーザーエージェントは 修飾名HTML大文字修飾名を内部スロットに格納することで最適化可能です。

要素を作成するには、 document document、文字列 localName、文字列または null namespace、 オプションで文字列または null prefix(省略時は null)、文字列または null is(省略時は null)、 真偽値 synchronousCustomElements(省略時は false)、 "default"、null、または CustomElementRegistry オブジェクト registry(省略時は "default")を与えて次の手順を実行します:

  1. result を null にする。

  2. registry が "default" なら、 registryカスタム要素レジストリの検索の結果にする(引数は document)。

  3. definitionカスタム要素定義の検索 の結果にする(引数は registry, namespace, localName, is)。

  4. definition が null でなく、かつ definitionnamelocal name と等しくない場合(つまり カスタマイズされた組み込み要素の場合):

    1. interfaceelement interfacelocalNameHTML名前空間に対するものにする。

    2. result要素内部の作成の結果にする (引数は document, interface, localName, HTML名前空間, prefix, "undefined", is, registry)。

    3. synchronousCustomElements が true の場合、例外をキャッチしつつ下記を実行:

      1. result を definition でアップグレードする

      このステップで例外 exception が発生した場合:

      1. 例外を報告する exceptiondefinitionconstructor に対応する JavaScript オブジェクトの 関連付けられた realmグローバルオブジェクト に対して報告する。

      2. resultカスタム要素状態を "failed" に設定する。

    4. それ以外の場合は カスタム要素アップグレードリアクションをキューする (引数は resultdefinition)。

  5. それ以外で definition が null でない場合:

    1. synchronousCustomElements が true の場合:

      1. Cdefinitionconstructor とする。

      2. surrounding agentactive custom element constructor map[C] に registry を設定する。

      3. 例外をキャッチしつつ次を実行:

        1. resultC を構築する結果にする(引数なし)。

        2. Assert: resultカスタム要素状態カスタム要素定義は初期化済み。

        3. Assert: result名前空間HTML 名前空間

          IDL により resultHTMLElement オブジェクトとなり、すべて HTML 名前空間を使用します。

        4. result属性リスト空でない場合は、 NotSupportedError DOMExceptionをスローする。

        5. resultがある場合は、 NotSupportedError DOMExceptionをスローする。

        6. resultが null でない場合は NotSupportedError DOMExceptionをスローする。

        7. resultノード文書documentでない場合は NotSupportedError DOMExceptionをスローする。

        8. resultローカル名localNameと等しくない場合は NotSupportedError DOMExceptionをスローする。

        9. result名前空間接頭辞prefixに設定する。

        10. resultisを null に設定する。

        11. resultカスタム要素レジストリregistryに設定する。

        これらのステップで例外 exception が発生した場合:

        1. 例外を報告する exceptiondefinitionconstructor に対応する JavaScript オブジェクトの 関連付けられた realmグローバルオブジェクト に対して報告する。

        2. result要素内部の作成の結果にする (引数は document, HTMLUnknownElement, localName, HTML名前空間, prefix, "failed", null, registry)。

      4. surrounding agentactive custom element constructor map[C] を削除する。

        通常はこの時点でもう削除されているはずです。

    2. それ以外の場合:

      1. result要素内部の作成の結果にする (引数は document, HTMLElement, localName, HTML名前空間, prefix, "undefined", null, registry)。

      2. カスタム要素アップグレードリアクションをキューする (引数は resultdefinition)。

  6. それ以外の場合:

    1. interfaceelement interfacelocalNamenamespaceに対するものにする。

    2. result要素内部の作成の結果にする (引数は document, interface, localName, namespace, prefix, "uncustomized", is, registry)。

    3. namespaceHTML名前空間であり、 localName有効なカスタム要素名であるか、is が null でない場合は resultカスタム要素状態を "undefined" に設定する。

  7. result を返す。

要素内部を作成するには、document document、インターフェイス interface、文字列 localName、文字列または null namespace、文字列または null prefix、文字列 state、文字列または null is、null または CustomElementRegistry オブジェクト registry を与えて次の手順を実行します:

  1. element を新しい要素interfaceを実装し、 名前空間namespace名前空間接頭辞prefixローカル名localNameカスタム要素レジストリregistryカスタム要素状態stateカスタム要素定義を null、 isisノード文書documentに設定したもの)とする。

  2. 確認element属性リスト空であること。

  3. elementを返す。

要素には 属性リストもあり、これは リストNamedNodeMap を通して公開されます。 要素が作成される際に明示的に与えられない限り、 その属性リストです。

要素属性を持つとは、その属性リスト属性A含む場合です。

これおよび他の仕様属性変更手順要素に対して定義することができます。アルゴリズムには elementlocalNameoldValuevaluenamespaceが渡されます。

属性変更を処理するには、 属性 attributeelementoldValuenewValueを使い、下記手順を実行します:

  1. mutation record の "attributes" を elementに対して、attributeローカル名attribute名前空間oldValue、« »、« »、null、null で キューする。

  2. elementカスタムなら、 カスタム要素コールバックリアクションをキューする (引数は element、コールバック名 "attributeChangedCallback"、« attributeローカル名oldValuenewValueattribute名前空間 »)。

  3. 属性変更手順elementattributeローカル名oldValuenewValueattribute名前空間で実行する。

属性を変更するには、 属性 attributevalueに変更する場合、次の手順を実行します:

  1. oldValueattributeとする。

  2. attributevalueに設定する。

  3. 属性変更を処理する(引数は attributeattribute要素oldValuevalue)。

属性を追加するには、 属性 attribute要素 element に追加する場合、次の手順を実行します:

  1. append attributeelement属性リストに追加する。

  2. attribute要素elementに設定する。

  3. attributeノード文書elementノード文書に設定する。

  4. 属性変更を処理する(引数は attributeelement、null、attribute)。

属性を除去するには、 属性 attribute を除去する場合、次の手順を実行します:

  1. elementattribute要素とする。

  2. remove attributeelement属性リストから除去する。
  3. attribute要素を null に設定する。

  4. 属性変更を処理する(引数は attributeelementattribute、null)。

属性を置換するには、 属性 oldAttribute属性 newAttributeで置換する場合:

  1. elementoldAttribute要素とする。

  2. replace oldAttributenewAttributeelement属性リスト内で置換する。

  3. newAttribute要素elementに設定する。

  4. newAttributeノード文書elementノード文書に設定する。

  5. oldAttribute要素を null に設定する。

  6. 属性変更を処理する(引数は oldAttributeelementoldAttributenewAttribute)。


文字列 qualifiedName要素 elementを与えて 名前で属性を取得するには:

  1. elementHTML名前空間にあり、 そのノード文書HTML文書である場合、 qualifiedNameASCII小文字に変換する。

  2. element属性リスト内で、 属性修飾名qualifiedNameと一致する最初のものを返す。なければ null。

null または文字列 namespace、文字列 localName要素 elementを与えて 名前空間とローカル名で属性を取得するには:

  1. namespace が空文字列なら、null に設定する。

  2. element属性リスト内で、 属性名前空間namespace かつ ローカル名localName のものを返す。なければ null。

要素 element、文字列 localName、オプションの null または文字列 namespace(省略時は null)を与えて 属性値を取得するには:

  1. attr属性を取得するの結果とする(引数は namespace, localName, element)。

  2. attr が null なら、空文字列を返す。

  3. attrを返す。

属性 attr要素 elementを与えて 属性を設定するには:

  1. attr要素が null でも element でもない場合、 InUseAttributeError DOMException をスローする。

  2. oldAttr属性を取得するの結果とする(引数は attr名前空間attrローカル名element)。

  3. oldAttrattr なら、attr を返す。

  4. oldAttr が null でなければ、置換 oldAttrattrにする。

  5. それ以外は、追加 attrelementにする。

  6. oldAttr を返す。

要素 element、文字列 localName、文字列 value、オプションの null または文字列 prefix(省略時は null)、オプションの null または文字列 namespace(省略時は null)を与えて 属性値を設定するには:

  1. attribute属性を取得するの結果とする(引数は namespace, localName, element)。
  2. attribute が null なら、属性を新しく作り、名前空間namespace名前空間接頭辞prefixローカル名localNamevalueノード文書elementノード文書に設定し、追加する。返す。
  3. 変更 attributevalueにする。

文字列 qualifiedName要素 elementを与えて 名前で属性を除去するには:

  1. attr名前で属性を取得するの結果とする(引数は qualifiedName, element)。

  2. attr が null でなければ、除去 attr

  3. attr を返す。

null または文字列 namespace、文字列 localName要素 elementを与えて 名前空間とローカル名で属性を除去するには:

  1. attr属性を取得するの結果とする(引数は namespace, localName, element)。

  2. attr が null でなければ、除去 attr

  3. attr を返す。


要素一意な識別子(ID)を持つことができます。

歴史的には要素は複数の識別子を持つことができました(例:HTMLのid属性やDTD)。この仕様はID をDOMの概念とし、要素ごとに1つだけ許可し、その値は id属性によって与えられます。

属性変更手順を使って要素IDを更新します:

  1. localNameidnamespace が null かつ value が null または空文字列なら、elementIDを未設定にする。

  2. それ以外で localNameidnamespace が null なら elementIDvalue に設定する。

この仕様は、どの要素でもclassidslot属性の要件を定めていますが、 それらの利用が適合かどうかについては規定しません。


ノードElement型の場合、 それを 親要素と呼びます。 ノードが異なる型の場合は 親要素は null です。


namespace = element . namespaceURI
名前空間を返します。
prefix = element . prefix
名前空間接頭辞を返します。
localName = element . localName
ローカル名を返します。
qualifiedName = element . tagName
HTML大文字修飾名を返します。

namespaceURIゲッター手順は this名前空間を返すことです。

prefixゲッター手順は this名前空間接頭辞を返すことです。

localNameゲッター手順は thisローカル名を返すことです。

tagNameゲッター手順は thisHTML大文字修飾名を返すことです。


element . id [ = value ]

elementid内容属性の値を返します。設定することで値を変更できます。

element . className [ = value ]

elementclass内容属性の値を返します。設定することで値を変更できます。

element . classList

elementclass内容属性を DOMTokenList オブジェクトを通じて、空白区切りのトークン集合として操作できます。

element . slot [ = value ]

elementslot内容属性の値を返します。設定することで値を変更できます。

文字列name反映するよう定義されたIDL属性は、以下のgetter・setter手順を持ちます:

getter手順

属性値を取得するthisname)の結果を返す。

setter手順

属性値を設定するthisnameと与えられた値)を実行する。

id属性は「id」を反映しなければなりません。

className属性は 「class」を反映しなければなりません。

classListゲッター手順は、 DOMTokenList オブジェクトを返すことです。関連付けられた要素this、関連付けられた 属性ローカル名は「class」です。この DOMTokenList オブジェクトのトークン集合は、要素クラスとも呼ばれます。

slot属性は「slot」を反映しなければなりません。

idclassslotは、どの要素にも現れることができ、 要素がどの名前空間に属していても有効な、事実上のスーパーグローバル属性です。


element . hasAttributes()

elementが属性を持つ場合はtrue、持たない場合はfalseを返します。

element . getAttributeNames()

elementの全ての修飾名を返します。重複する場合もあります。

element . getAttribute(qualifiedName)

element属性のうち、修飾名qualifiedNameである最初のものを返します。該当する属性がなければnullを返します。

element . getAttributeNS(namespace, localName)

element属性のうち、名前空間namespaceローカル名localNameであるものを返します。該当する属性がなければnullを返します。

element . setAttribute(qualifiedName, value)

elementを、qualifiedNameの最初の属性valueとして設定します。

element . setAttributeNS(namespace, localName, value)

elementを、namespacelocalName属性valueとして設定します。

element . removeAttribute(qualifiedName)

element属性のうち、修飾名qualifiedNameである最初のものを除去します。

element . removeAttributeNS(namespace, localName)

element属性のうち、名前空間namespaceローカル名localNameであるものを除去します。

element . toggleAttribute(qualifiedName [, force])

forceが与えられない場合、qualifiedNameを「トグル」します。存在すれば除去、なければ追加します。forceがtrueなら追加、falseなら除去します。

qualifiedNameが現在存在すればtrue、そうでなければfalseを返します。

element . hasAttribute(qualifiedName)

element属性を持ち、その修飾名qualifiedNameであればtrue、そうでなければfalseを返します。

element . hasAttributeNS(namespace, localName)

element属性を持ち、その名前空間namespaceローカル名localNameであればtrue。

hasAttributes()メソッド手順は、this属性リスト空であればfalse、そうでなければtrueを返すことです。

attributesゲッター手順は、 関連付けられたNamedNodeMapを返すことです。

getAttributeNames()メソッド手順は 修飾名属性ごとに、this属性リストの順序で返すことです。なければ新しいリストを返します。

これらは一意である保証はありません。

getAttribute(qualifiedName)メソッド手順は以下の通りです:

  1. attr名前で属性を取得する(引数は qualifiedNamethis)の結果とする。

  2. attr が null なら、null を返す。

  3. attrを返す。

getAttributeNS(namespace, localName)メソッド手順は以下の通りです:

  1. attr名前空間とローカル名で属性を取得する(引数は namespace, localName, this)の結果とする。

  2. attr が null なら、null を返す。

  3. attrを返す。

setAttribute(qualifiedName, value)メソッド手順は以下の通りです:

  1. qualifiedName有効な属性ローカル名でない場合、InvalidCharacterError InvalidCharacterError DOMExceptionをスローする。

    パラメータ名に反して、 qualifiedNameは既存の修飾名の属性があれば修飾名として使われ、なければ新しい属性のローカル名として使われます。バリデートは後者だけ必要です。

  2. thisHTML名前空間にあり、そのノード文書HTML文書なら、 qualifiedNameASCII小文字に変換する。

  3. attributethis属性リスト内で修飾名qualifiedName である最初の属性とし、なければ null。

  4. attribute が null なら、属性を新しく作り、ローカル名qualifiedNamevalueノード文書thisノード文書にし、 追加して return する。

  5. 変更 attributevalueにする。

setAttributeNS(namespace, qualifiedName, value)メソッド手順は以下の通りです:

  1. (namespace, prefix, localName) を バリデートおよび抽出(引数は namespace, qualifiedName, "element")の結果とする。

  2. 属性値を設定するthis, localName, value, prefix, namespace)を実行する。

removeAttribute(qualifiedName)メソッド手順は 名前で属性を除去する(引数は qualifiedName, this)を実行し、undefined を返すことです。

removeAttributeNS(namespace, localName)メソッド手順は 名前空間とローカル名で属性を除去する (引数は namespace, localName, this)を実行し、undefined を返すことです。

hasAttribute(qualifiedName)メソッド手順は以下の通りです:

  1. thisHTML名前空間にあり、そのノード文書HTML文書なら、 qualifiedNameASCII小文字に変換する。

  2. this属性を持つ属性で、修飾名qualifiedName)ならtrue、そうでなければfalse。

toggleAttribute(qualifiedName, force)メソッド手順は以下の通りです:

  1. qualifiedName有効な属性ローカル名でない場合、InvalidCharacterError InvalidCharacterError DOMExceptionをスローする。

    上記の議論参照。バリデーションは修飾名ではなくローカル名として行います。

  2. thisHTML名前空間にあり、そのノード文書HTML文書なら、 qualifiedNameASCII小文字に変換する。

  3. attributethis属性リスト内で修飾名qualifiedName である最初の属性とし、なければ null。

  4. attribute が null の場合:

    1. force が未指定または true なら、属性を新しく作り、ローカル名qualifiedNameを空文字列、ノード文書thisノード文書にし、 追加して true を返す。

    2. false を返す。

  5. それ以外で force が未指定または false なら、 名前で属性を除去する(引数は qualifiedName, this)を実行し、false を返す。

  6. true を返す。

hasAttributeNS(namespace, localName)メソッド手順は以下の通りです:

  1. namespace が空文字列なら、null に設定する。

  2. this属性を持つ属性で、名前空間namespace かつローカル名localName)ならtrue、そうでなければfalse。

getAttributeNode(qualifiedName)メソッド手順は、 名前で属性を取得する(引数は qualifiedName, this)の結果を返すことです。

getAttributeNodeNS(namespace, localName)メソッド手順は、 名前空間とローカル名で属性を取得する(引数は namespace, localName, this)の結果を返すことです。

setAttributeNode(attr)および setAttributeNodeNS(attr)メソッド手順は、 属性を設定する(引数は attr, this)の結果を返すことです。

removeAttributeNode(attr)メソッド手順は:

  1. this属性リストattrを含まない場合、 NotFoundError NotFoundError DOMExceptionをスローする。

  2. 除去 attr

  3. attr を返す。


shadow = element . attachShadow(init)

elementシャドウルートを生成し、それを返します。

shadow = element . shadowRoot

elementシャドウルート(存在する場合、かつシャドウルートmodeが"open"の場合)を返します。そうでなければnull。

有効なシャドウホスト名は:

attachShadow(init)メソッド手順は:

  1. registrythisカスタム要素レジストリとする。

  2. init["customElementRegistry"] が null でない場合:

    1. registryinit["customElementRegistry"]とする。

    2. registryis scopedがfalseで、 registrythisノード文書カスタム要素レジストリと異なる場合、 NotSupportedError NotSupportedError DOMExceptionをスローする。

  3. シャドウルートを付与する(引数は this, init["mode"], init["clonable"], init["serializable"], init["delegatesFocus"], init["slotAssignment"], registry)を実行する。

  4. thisシャドウルートを返す。

シャドウルートを付与するには、 要素 element、文字列 mode、真偽値 clonable、 真偽値 serializable、真偽値 delegatesFocus、文字列 slotAssignment、null または CustomElementRegistry オブジェクト registryを与える:

  1. element名前空間HTML名前空間でない場合、 NotSupportedError NotSupportedError DOMExceptionをスローする。

  2. elementローカル名有効なシャドウホスト名でない場合、 NotSupportedError NotSupportedError DOMExceptionをスローする。

  3. elementローカル名有効なカスタム要素名である、または elementisがnullでない場合:

    1. definitionカスタム要素定義の検索 (引数は elementカスタム要素レジストリ、名前空間、ローカル名、is値)とする。

    2. definitionが null でなく、かつ definitiondisable shadowがtrueなら、 NotSupportedError NotSupportedError DOMExceptionをスローする。

  4. elementシャドウホストの場合:

    1. currentShadowRootelementシャドウルートとする。

    2. 以下いずれかが真の場合:

      • currentShadowRootdeclarativeがfalse

      • currentShadowRootmodemodeと異なる

      この場合は NotSupportedError NotSupportedError DOMExceptionをスローする。

    3. それ以外の場合:

      1. 除去 currentShadowRootすべて(ツリー順で)。

      2. currentShadowRootdeclarativeをfalseにする。

      3. return。

  5. shadow を新しいシャドウルート(ノード文書は elementノード文書hostelementmodemode)とする。

  6. shadowdelegates focusdelegatesFocusに設定する。

  7. elementカスタム要素状態が"precustomized"または"custom"の場合、 shadowelement internalsで利用可能をtrueにする。

  8. shadowslot assignmentslotAssignmentに設定する。

  9. shadowdeclarativeをfalseに設定する。

  10. shadowclonableclonableに設定する。

  11. shadowserializableserializableに設定する。

  12. shadowcustom element registryregistryに設定する。

  13. elementシャドウルートshadowに設定する。

shadowRootゲッター手順は:

  1. shadowthisシャドウルートとする。

  2. shadowが null またはmodeが"closed"なら、 null を返す。

  3. shadowを返す。


registry = element . customElementRegistry

elementCustomElementRegistry オブジェクトを返します(存在しない場合はnull)。

customElementRegistryゲッター手順は thisカスタム要素レジストリを返すことです。


element . closest(selectors)
elementから始めて selectorsに一致する最初の包括的祖先を返します。一致しなければnull。
element . matches(selectors)
elementrootに対してselectorsと照合し、 elementが一致するならtrue、そうでなければfalse。

closest(selectors)メソッド手順は:

  1. sselectorsからセレクターを構文解析するの結果とする。 [SELECTORS4]

  2. sが失敗ならSyntaxError SyntaxError DOMExceptionをスローする。

  3. elementsthis包括的祖先のうち 要素であるもの(ツリー順を逆にしたもの)とする。

  4. elements 内の各 element について、selement、および スコープルート this を用いて セレクターを要素にマッチさせるが成功を返した場合は、 element を返す。[SELECTORS4]

  5. null を返す。

matches(selectors)および webkitMatchesSelector(selectors) メソッド手順は:

  1. sselectorsからセレクターを構文解析するの結果とする。 [SELECTORS4]

  2. sが失敗ならSyntaxError SyntaxError DOMExceptionをスローする。

  3. sthis、 そしてスコープルート thisを用いて セレクターを要素にマッチさせる の結果が成功を返した場合は true を返し、そうでなければ false を返す。[SELECTORS4]


getElementsByTagName(qualifiedName) メソッド手順はqualifiedNameがqualifiedNameである要素のリストthisに対して)を返すことです。

getElementsByTagNameNS(namespace, localName) メソッド手順はnamespaceがnamespace、localNameがlocalNameである要素のリストthisに対して)を返すことです。

getElementsByClassName(classNames) メソッド手順はclassNamesがclassNamesである要素のリストthisに対して)を返すことです。


隣接挿入には、 要素 element、文字列 whereノード nodeを与え、whereの最初の ASCII大小区別なし一致に対する手順を実行します:

"beforebegin"

elementが null なら、null を返す。

nodeelementelementの前にpre-insertする結果を返す。

"afterbegin"

nodeelementelement最初の子の前にpre-insertする結果を返す。

"beforeend"

nodeelementの null の前にpre-insertする結果を返す。

"afterend"

elementが null なら、null を返す。

nodeelementelement次の兄弟の前にpre-insertする結果を返す。

それ以外

SyntaxError SyntaxError DOMExceptionをスローする。

insertAdjacentElement(where, element) メソッド手順は隣接挿入(引数はthis, where, element)の結果を返すことです。

insertAdjacentText(where, data) メソッド手順は:

  1. text を新しいText ノードdatadataノード文書thisノード文書)とする。

  2. 隣接挿入(引数はthis, where, text)を実行する。

このメソッドは何も返しません。これは設計される前から存在していたためです。

4.9.1. インターフェイス NamedNodeMap

[Exposed=Window,
 LegacyUnenumerableNamedProperties]
interface NamedNodeMap {
  readonly attribute unsigned long length;
  getter Attr? item(unsigned long index);
  getter Attr? getNamedItem(DOMString qualifiedName);
  Attr? getNamedItemNS(DOMString? namespace, DOMString localName);
  [CEReactions] Attr? setNamedItem(Attr attr);
  [CEReactions] Attr? setNamedItemNS(Attr attr);
  [CEReactions] Attr removeNamedItem(DOMString qualifiedName);
  [CEReactions] Attr removeNamedItemNS(DOMString? namespace, DOMString localName);
};

NamedNodeMap には関連付けられた 要素要素)があります。

NamedNodeMap オブジェクトの 属性リストは、その 要素属性リストです。


NamedNodeMap オブジェクトの対応プロパティインデックスは、属性リストのサイズから 1 を引いた範囲の 0 からの数字です。ただし、 属性リストの場合は対応プロパティインデックスはありません。

lengthゲッター手順は 属性リストサイズを返すことです。

item(index)メソッド手順は:

  1. indexthis属性リストサイズ以上なら null を返す。

  2. それ以外の場合は this属性リスト[index] を返す。

NamedNodeMap オブジェクトの対応プロパティ名は、次の手順の戻り値です:

  1. names をこのNamedNodeMap オブジェクトの属性リストにある属性修飾名の重複を除いたリスト(順序を保持)とする。

  2. このNamedNodeMap オブジェクトの要素HTML名前空間にあり、そのノード文書HTML文書である場合は、 names の各 nameについて:

    1. lowercaseNamenameASCII小文字とする。

    2. lowercaseNamenameと異なる場合、namesからnameを除去する。

  3. namesを返す。

getNamedItem(qualifiedName) メソッド手順は名前で属性を取得する(引数は qualifiedName, element)の結果を返すことです。

getNamedItemNS(namespace, localName) メソッド手順は名前空間とローカル名で属性を取得する(引数は namespace, localName, element)の結果を返すことです。

setNamedItem(attr)および setNamedItemNS(attr)メソッド手順は 属性を設定する(引数は attr, element)の結果を返すことです。

removeNamedItem(qualifiedName) メソッド手順は:

  1. attr名前で属性を除去する(引数は qualifiedName, element)の結果とする。

  2. attr が null なら、NotFoundError NotFoundError DOMExceptionをスローする。

  3. attr を返す。

removeNamedItemNS(namespace, localName) メソッド手順は:

  1. attr名前空間とローカル名で属性を除去する(引数は namespace, localName, element)の結果とする。

  2. attr が null なら、NotFoundError NotFoundError DOMExceptionをスローする。

  3. attr を返す。

4.9.2. インターフェイス Attr

[Exposed=Window]
interface Attr : Node {
  readonly attribute DOMString? namespaceURI;
  readonly attribute DOMString? prefix;
  readonly attribute DOMString localName;
  readonly attribute DOMString name;
  [CEReactions] attribute DOMString value;

  readonly attribute Element? ownerElement;

  readonly attribute boolean specified; // useless; always returns true
};

Attr ノードは単に 属性として知られています。IDL属性と混同しないよう、内容属性と呼ばれることもあります。

属性名前空間(null または空でない文字列)、 名前空間接頭辞(null または空でない文字列)、 ローカル名(空でない文字列)、 (文字列)、および 要素(null または 要素)を持ちます。

もし今設計されていたら名前と値だけを持つでしょう。☹

属性修飾名は、 ローカル名(名前空間接頭辞が null の場合)、 そうでなければ名前空間接頭辞、":"、ローカル名の順に連結したものです。

ユーザーエージェントは内部スロットとして保持し最適化可能です。

属性が作成される時、 ローカル名が与えられます。 属性が作成される際に明示的に与えられない限り、 名前空間名前空間接頭辞要素は null に設定され、 は空文字列に設定されます。

A属性 とは、属性のうち、 ローカル名Aであり、 名前空間名前空間接頭辞が null である属性です。


namespaceURIゲッター手順は this名前空間を返すことです。

prefixゲッター手順は this名前空間接頭辞を返すことです。

localNameゲッター手順は thisローカル名を返すことです。

nameゲッター手順は this修飾名を返すことです。

valueゲッター手順は thisを返すことです。

既存の属性値を設定するには、属性 attributeと 文字列 valueを与えて、下記手順を実行します:

  1. attribute要素が null なら、attributevalue に設定する。

  2. それ以外の場合は 属性を変更する(引数は attribute, value)を実行する。

value セッター手順は 既存の属性値を設定する(引数は this、与えられた値)を実行することです。


ownerElementゲッター手順は this要素を返すことです。


specifiedゲッター手順は true を返すことです。

4.10. インターフェイス CharacterData

[Exposed=Window]
interface CharacterData : Node {
  attribute [LegacyNullToEmptyString] DOMString data;
  readonly attribute unsigned long length;
  DOMString substringData(unsigned long offset, unsigned long count);
  undefined appendData(DOMString data);
  undefined insertData(unsigned long offset, DOMString data);
  undefined deleteData(unsigned long offset, unsigned long count);
  undefined replaceData(unsigned long offset, unsigned long count, DOMString data);
};

CharacterData は抽象インターフェイスです。直接インスタンス化することはできません。 TextProcessingInstructionComment ノードで使用されます。

ノードCharacterData インターフェイス継承)は、 dataと呼ばれる可変文字列を持ちます。

データを置換するには、 ノード node、オフセットoffset、カウントcount、データdataを与えて、次の手順を実行します:

  1. lengthnodelengthとする。
  2. offsetlength より大きい場合、IndexSizeError IndexSizeError DOMExceptionをスローする。
  3. offset + countlength より大きい場合、 countlength - offset に設定する。
  4. mutation record の "characterData" を nodeに対し、null, null, nodedata, « », « », null, null でキューする。

  5. nodedataoffsetコード単位の後ろにdataを挿入する。
  6. delete offsetoffset + datalengthとする。
  7. delete offsetコード単位から countコード単位を nodedataから削除する。
  8. live rangestart nodenodestart offsetoffsetより大きく、 offset + count以下の場合、そのstart offsetoffsetに設定する。

  9. live rangeend nodenodeend offsetoffsetより大きく、 offset + count以下の場合、そのend offsetoffsetに設定する。

  10. live rangestart nodenodestart offsetoffset + countより大きい場合、 start offsetdatalengthだけ増やし、countだけ減らす。

  11. live rangeend nodenodeend offsetoffset + countより大きい場合、 end offsetdatalengthだけ増やし、countだけ減らす。

  12. nodeが null でない場合は、 子変更手順nodeに対して実行する。

データの部分文字列には、 ノードnode、オフセットoffset、カウントcountを与えて次の手順を実行します:

  1. lengthnodelengthとする。
  2. offsetlength より大きい場合、IndexSizeError IndexSizeError DOMExceptionをスローする。
  3. offset + countlength より大きい場合は、 nodedataoffset番目のコード単位から最後までの文字列を返して終了。
  4. それ以外は nodedataoffset番目のコード単位から offset+count番目のコード単位までの文字列を返す。

dataゲッター手順は thisdataを返すことです。セッターは データを置換する(ノード this、オフセット0、 カウント thislength、新しい値)を実行することです。

lengthゲッター手順は thislengthを返すことです。

substringData(offset, count) メソッドの手順は、ノード substring datathis、 offset offset、count count で実行した結果を返すことである。

appendData(data)メソッド手順は データを置換する(ノード this、 オフセット thislength、カウント0、 データdata)を実行することです。

insertData(offset, data) メソッド手順は データを置換する(ノード this、オフセットoffset、 カウント0、データdata)を実行することです。

deleteData(offset, count) メソッド手順は データを置換する(ノード this、オフセットoffset、 カウントcount、データ空文字列)を実行することです。

replaceData(offset, count, data) メソッド手順は データを置換する(ノード this、オフセットoffset、 カウントcount、データdata)を実行することです。

4.11. インターフェイス Text

[Exposed=Window]
interface Text : CharacterData {
  constructor(optional DOMString data = "");

  [NewObject] Text splitText(unsigned long offset);
  readonly attribute DOMString wholeText;
};
text = new Text([data = ""])
新しいText ノードを返します。その datadataです。
text . splitText(offset)
dataを指定された offsetで分割し、残りをText ノードとして返します。
text . wholeText
全ての直接の Text ノード 兄弟dataを連結して返します。

排他的なTextノードは、 Text ノードで、 CDATASection ノードでないものです。

連続するTextノードは、 ノードnodeに対し、 nodenode前の兄弟Text ノード(あれば)とその 連続するTextノードnode次の兄弟 Text ノード(あれば)とその 連続するTextノードを含み、重複は避けます。

連続する排他的Textノードは、 ノードnodeに対し、 nodenode前の兄弟排他的Textノード(あれば)とその 連続する排他的Textノードnode次の兄弟排他的Textノード(あれば)とその 連続する排他的Textノードを含み、重複は避けます。

子のテキスト内容は、 ノードnodeに対し、 nodeの全てのText ノード data連結(ツリー順で)したものです。

子孫のテキスト内容は、 ノードnodeに対し、 nodeの全てのText ノード 子孫data連結(ツリー順で)したものです。


new Text(data) コンストラクタ手順は、thisdatadataに設定し、 thisノード文書current global object関連付けられたDocumentに設定することです。

Textノードを分割するには、 Text ノードnodeと オフセットoffsetを与えて、次の手順を実行します:

  1. lengthnodelengthとする。
  2. offsetlength より大きい場合、IndexSizeError IndexSizeError DOMExceptionをスローする。
  3. countlength - offsetとする。
  4. new dataデータの部分文字列(ノード node、オフセットoffset、カウントcount)の結果とする。
  5. new node を新しいText ノード(ノード文書は nodeと同じ)、new nodedatanew dataを設定する。
  6. parentnodeとする。
  7. parentが null でない場合:

    1. 挿入 new nodeparentnode次の兄弟の前に挿入する。

    2. live rangestart nodenodestart offsetoffsetより大きい場合、 start nodenew nodeにし、 start offsetoffsetだけ減らす。

    3. live rangeend nodenodeend offsetoffsetより大きい場合、 end nodenew nodeにし、 end offsetoffsetだけ減らす。

    4. live rangestart nodeparentstart offsetnodeindex+1と等しい場合、 start offsetを1増やす。

    5. live rangeend nodeparentend offsetnodeindex+1と等しい場合、 end offsetを1増やす。

  8. データを置換する (ノード node、オフセットoffset、カウントcount、データ空文字列)を実行する。
  9. new nodeを返す。

メソッド splitText(offset) の手順は、 オフセット offset を使用して 分割するために this を呼び出します。

wholeTextゲッター手順は、 連結した data連続するTextノードthis、ツリー順)を返すことです。

4.12. インターフェイス CDATASection

[Exposed=Window]
interface CDATASection : Text {
};

4.13. インターフェイス ProcessingInstruction

[Exposed=Window]
interface ProcessingInstruction : CharacterData {
  readonly attribute DOMString target;
};

ProcessingInstruction ノードは、関連付けられた ターゲットを持ちます。

targetゲッター手順は、 thisターゲットを返すことです。

4.14. インターフェイス Comment

[Exposed=Window]
interface Comment : CharacterData {
  constructor(optional DOMString data = "");
};
comment = new Comment([data = ""])
新しいComment ノードを返します。その datadataです。

new Comment(data) コンストラクタの手順は、thisdatadataに設定し、 thisノード文書current global object関連付けられたDocumentに設定することです。

5. Range(範囲)

5.1. 「DOM Range」について

StaticRangeRange オブジェクト(範囲)は、 ノードツリー内の内容の連続した部分を表します。各範囲開始終了を持ち、 それらは境界点です。境界点は、 タプルであり、 ノードオフセットから構成されます。つまり、 範囲ノードツリー内の 2つの境界点間の内容を表します。

範囲は編集時に選択やコピーなどでよく使われます。

上記のノードツリーでは、範囲を使って “syndata is awes”という連続部分を表すことができます。pp 要素に、 emem 要素に割り当てられていた場合、次のようになります:

var range = new Range(),
    firstText = p.childNodes[1],
    secondText = em.firstChild
range.setStart(firstText, 9) // do not forget the leading space
range.setEnd(secondText, 4)
// range now stringifies to the aforementioned quote

属性(例えば上記ノードツリーsrcaltなど)は 範囲で表すことはできません。範囲ノード専用です。

Range オブジェクトは StaticRange オブジェクトとは異なり、 ノードツリーの変更の影響を受けます。したがってこれらはライブ範囲とも呼ばれます。そのような変更によって範囲が無効になることはなく、同じ内容部分を表し続けるようにします。 必然的に、ライブ範囲自身も ノードツリーの変更(例えば一部内容が変更された場合など)の際に修正される場合があります。

挿入除去アルゴリズム、 normalize() メソッド、データ置換テキスト分割 アルゴリズムも参照してください。

ノードツリーの変更に応じて ライブ範囲を更新するのは負荷が高い場合があります。ノードツリーが変化するたび、 影響を受けるRange オブジェクトすべてが更新されます。アプリケーションが一部のライブ範囲に関心がなくても、変更が発生した時に全てを最新化するコストがかかります。

StaticRange オブジェクトは、ノードツリーが変更されても更新されない軽量な範囲です。 したがってライブ範囲と比べ保守コストがかかりません。

5.2. 境界点

境界点は、タプル であり、次の要素から構成されます。 ノードノード)と、 オフセット(0以上の整数)。

正しい境界点オフセットは 0以上、かつ境界点ノード長さ以下の値になります。

位置は、 境界点 (nodeA, offsetA)が、境界点 (nodeB, offsetB)に対して 等しいのいずれかとなり、以下の手順で判定されます。

  1. アサート:nodeAnodeBは同じルートを持つ。

  2. もしnodeAnodeBであれば、offsetAoffsetBと等しければ等しいを返し、 offsetAoffsetBより小さければoffsetAoffsetBより大きければを返す。
  3. もしnodeA後続nodeBであれば、 (nodeB, offsetB)が(nodeA, offsetA)に対して 位置なら を返し、 なら を返す。

  4. もしnodeAnodeB祖先であれば:

    1. childnodeBとする。

    2. childnodeAでない間、 childをそのに更新する。

    3. childインデックスoffsetAより小さければ を返す。

  5. を返す。

5.3. インターフェイス AbstractRange

[Exposed=Window]
interface AbstractRange {
  readonly attribute Node startContainer;
  readonly attribute unsigned long startOffset;
  readonly attribute Node endContainer;
  readonly attribute unsigned long endOffset;
  readonly attribute boolean collapsed;
};

AbstractRange インターフェイスを実装するオブジェクトは 範囲 と呼ばれます。

範囲には2つの関連する境界点開始終了)があります。

便宜上、範囲開始ノードは、その開始ノード開始オフセット開始オフセット終了ノード終了ノード終了オフセット終了オフセットです。

範囲は、折り畳み済み(collapsed)である場合、開始ノード終了ノードが一致し、 開始オフセット終了オフセットも一致します。

node = range . startContainer
range開始ノードを返します。
offset = range . startOffset
range開始オフセットを返します。
node = range . endContainer
range終了ノードを返します。
offset = range . endOffset
range終了オフセットを返します。
collapsed = range . collapsed
range折り畳み済みならtrue、それ以外はfalseを返します。

startContainer ゲッター手順は、this開始ノードを返すことです。

startOffset ゲッター手順は、this開始オフセットを返すことです。

endContainer ゲッター手順は、this終了ノードを返すことです。

endOffset ゲッター手順は、this終了オフセットを返すことです。

collapsed ゲッター手順は、this折り畳み済みならtrue、それ以外はfalseを返すことです。

5.4. インターフェイス StaticRange

dictionary StaticRangeInit {
  required Node startContainer;
  required unsigned long startOffset;
  required Node endContainer;
  required unsigned long endOffset;
};

[Exposed=Window]
interface StaticRange : AbstractRange {
  constructor(StaticRangeInit init);
};
staticRange = new StaticRange(init)

新しい範囲 オブジェクトを返します。これはノードツリーが変更されても更新されません。

new StaticRange(init) コンストラクタの手順は以下の通りです:

  1. init["startContainer"] または init["endContainer"] が DocumentType または Attr ノードの場合、InvalidNodeTypeError InvalidNodeTypeError DOMExceptionをスローする。

  2. this開始を (init["startContainer"], init["startOffset"]) に、終了を (init["endContainer"], init["endOffset"]) に設定する。

StaticRange は、以下すべてが満たされる場合に 有効(valid)です:

5.5. インターフェイス Range

[Exposed=Window]
interface Range : AbstractRange {
  constructor();

  readonly attribute Node commonAncestorContainer;

  undefined setStart(Node node, unsigned long offset);
  undefined setEnd(Node node, unsigned long offset);
  undefined setStartBefore(Node node);
  undefined setStartAfter(Node node);
  undefined setEndBefore(Node node);
  undefined setEndAfter(Node node);
  undefined collapse(optional boolean toStart = false);
  undefined selectNode(Node node);
  undefined selectNodeContents(Node node);

  const unsigned short START_TO_START = 0;
  const unsigned short START_TO_END = 1;
  const unsigned short END_TO_END = 2;
  const unsigned short END_TO_START = 3;
  short compareBoundaryPoints(unsigned short how, Range sourceRange);

  [CEReactions] undefined deleteContents();
  [CEReactions, NewObject] DocumentFragment extractContents();
  [CEReactions, NewObject] DocumentFragment cloneContents();
  [CEReactions] undefined insertNode(Node node);
  [CEReactions] undefined surroundContents(Node newParent);

  [NewObject] Range cloneRange();
  undefined detach();

  boolean isPointInRange(Node node, unsigned long offset);
  short comparePoint(Node node, unsigned long offset);

  boolean intersectsNode(Node node);

  stringifier;
};

Range インターフェイスを実装するオブジェクトは ライブ範囲 と呼ばれます。

ツリーを変更するアルゴリズム(特に 挿入除去移動データ置換分割 アルゴリズム)は、そのツリーに関連付けられたライブ範囲を変更します。

ルートは、ライブ範囲開始ノードルートです。

ノード node包含される となるのは、ライブ範囲 rangeに対し、nodeルートrangeルートと一致し、(node, 0) が かつ range開始、 (node, node長さ) が かつ range終了の場合です。

ノード部分的に包含されるのは、ライブ範囲開始ノード包括的祖先だが終了ノードではない場合、または逆の場合です。

これらの定義を理解するためのポイント:

ライブ範囲除去前手順として、 ノード nodeを与えた場合、以下の通りです:

  1. parentnodeとする。

  2. アサートparent は null でない。

  3. indexnodeインデックスとする。

  4. ライブ範囲のうち、 開始ノードnode包括的子孫であるものについて、 その開始を (parent, index)に設定する。

  5. ライブ範囲のうち、 終了ノードnode包括的子孫であるものについて、 その終了を(parent, index)に設定する。

  6. ライブ範囲のうち、 開始ノードparentで、 開始オフセットindexより大きいものについて、 その開始オフセットを1減らす。

  7. ライブ範囲のうち、 終了ノードparentで、 終了オフセットindexより大きいものについて、 その終了オフセットを1減らす。


range = new Range()
新しいライブ範囲を返します。

new Range() コンストラクタ手順は、 this開始終了を (current global object関連付けられたDocument, 0) に設定することです。


container = range . commonAncestorContainer
documentから最も遠い、 両方の range開始ノード終了ノード祖先である ノードを返します。

commonAncestorContainerゲッター手順は:

  1. container開始ノードとする。
  2. container終了ノード包括的祖先でない間、 containercontainerにする。
  3. containerを返す。

開始または終了を設定する には、range境界点 (node, offset)を与え、次の手順を実行します:

  1. nodedoctypeの場合、 InvalidNodeTypeError InvalidNodeTypeError DOMExceptionをスローする。
  2. offsetnode長さより大きい場合、 IndexSizeError IndexSizeError DOMExceptionをスローする。
  3. bp境界点 (node, offset)とする。
  4. この手順が「開始を設定する」として呼ばれた場合
    1. rangeルートnodeルートと異なる場合、 またはbprange終了より の場合は、 range終了bpに設定する。
    2. range開始bpに設定する。
    この手順が「終了を設定する」として呼ばれた場合
    1. rangeルートnodeルートと異なる場合、 またはbprange開始より の場合は、 range開始bpに設定する。
    2. range終了bpに設定する。

setStart(node, offset)メソッド手順は、 開始を設定する (this境界点(node, offset)) を実行することです。

setEnd(node, offset)メソッド手順は、 終了を設定する (this境界点(node, offset)) を実行することです。

setStartBefore(node)メソッド手順は:

  1. parentnodeとする。
  2. parentが null の場合、InvalidNodeTypeError InvalidNodeTypeError DOMExceptionをスローする。
  3. 開始を設定する (this境界点( parent, nodeインデックス)) を実行する。

setStartAfter(node)メソッド手順は:

  1. parentnodeとする。

  2. parentが null の場合、InvalidNodeTypeError InvalidNodeTypeError DOMExceptionをスローする。

  3. 開始を設定する (this境界点( parent, nodeインデックス+1)) を実行する。

setEndBefore(node)メソッド手順は:

  1. parentnodeとする。
  2. parentが null の場合、InvalidNodeTypeError InvalidNodeTypeError DOMExceptionをスローする。
  3. 終了を設定する (this境界点( parent, nodeインデックス)) を実行する。

setEndAfter(node)メソッド手順は:

  1. parentnodeとする。

  2. parentが null の場合、InvalidNodeTypeError InvalidNodeTypeError DOMExceptionをスローする。

  3. 終了を設定する (this境界点( parent, nodeインデックス+1)) を実行する。

collapse(toStart)メソッド手順は、 toStartがtrueなら終了開始に設定し、そうでなければ 開始終了に設定することです。

ノードを選択するには、 ノード node範囲 range内で 次の手順を実行します:

  1. parentnodeとする。

  2. parentが null の場合、InvalidNodeTypeError InvalidNodeTypeError DOMExceptionをスローする。

  3. indexnodeインデックスとする。

  4. range開始境界点( parent, index)に設定する。

  5. range終了境界点( parent, index+1)に設定する。

selectNode(node)メソッド手順は、 ノードを選択する (node, this) を実行することです。

selectNodeContents(node)メソッド手順は:

  1. nodedoctypeの場合、InvalidNodeTypeError InvalidNodeTypeError DOMExceptionをスローする。

  2. lengthnode長さとする。

  3. 開始境界点(node, 0) に設定する。

  4. 終了境界点(node, length) に設定する。


compareBoundaryPoints(how, sourceRange) メソッドの手順は以下の通りです:

  1. how

    以外の場合は、NotSupportedError NotSupportedError DOMExceptionをスローする。
  2. thisルートsourceRangeルートと異なる場合は、 WrongDocumentError WrongDocumentError DOMExceptionをスローする。
  3. howが以下の場合:

    START_TO_START:
    this pointthis開始とし、 other pointsourceRange開始とする。
    START_TO_END:
    this pointthis終了とし、 other pointsourceRange開始とする。
    END_TO_END:
    this pointthis終了とし、 other pointsourceRange終了とする。
    END_TO_START:
    this pointthis開始とし、 other pointsourceRange終了とする。
  4. this pointother pointに対する位置

    −1を返す。
    等しい
    0を返す。
    1を返す。

deleteContents()メソッド手順は:

  1. this折り畳み済みなら、returnする。

  2. original start nodeoriginal start offsetoriginal end nodeoriginal end offsetthis開始ノード開始オフセット終了ノード終了オフセットとする。
  3. original start nodeoriginal end nodeと等しく、 かつCharacterData ノードであれば、 データ置換 (ノード original start node、オフセット original start offset、カウント original end offsetoriginal start offset、データ空文字列)を実行し、returnする。

  4. nodes to remove包含される ノードthis内、ツリー順、かつ this内で包含されている場合は省略)とするリストにする。
  5. original start nodeoriginal end node包括的祖先であれば、 new nodeoriginal start nodenew offsetoriginal start offsetとする。
    1. reference nodeoriginal start nodeとする。
    2. reference nodeがnullでなく、かつ 包括的祖先でない間、 reference nodeをそのにする。
    3. new nodereference nodenew offsetreference nodeインデックス+1とする。

      reference nodeがnullなら ルートなので this包括的祖先となり、 original end nodeに到達できない。

  6. original start nodeCharacterData ノードなら データ置換 (ノードoriginal start node、オフセット original start offset、カウントoriginal start node長さoriginal start offset、データ空文字列)を実行する。

  7. nodes to remove内の各nodeツリー順除去する。

  8. original end nodeCharacterData ノードなら データ置換 (ノード original end node、オフセット0、カウント original end offset、データ空文字列)を実行する。

  9. 開始終了を (new node, new offset)に設定する。

範囲を抽出するには、 ライブ範囲 rangeに対して以下の手順を実行します:

  1. fragmentを新しいDocumentFragment ノードノード文書range開始ノードノード文書)とする。

  2. range折り畳み済みならfragmentを返す。

  3. original start nodeoriginal start offsetoriginal end nodeoriginal end offsetrange開始ノード開始オフセット終了ノード終了オフセットとする。
  4. original start nodeoriginal end nodeと等しく、 かつCharacterData ノードの場合:

    1. clone複製(ノードoriginal start node)とする。
    2. clonedata部分文字列取得(ノード original start node、オフセット original start offset、カウント original end offsetoriginal start offset)の結果に設定する。
    3. appendclonefragmentへ追加。
    4. データ置換 (ノード original start node、オフセット original start offset、カウント original end offsetoriginal start offset、データ空文字列)を実行。
    5. fragmentを返す。
  5. common ancestororiginal start nodeとする。
  6. common ancestororiginal end node包括的祖先でない間、 common ancestorをそのにする。
  7. first partially contained childをnullにする。
  8. original start nodenot 包括的祖先であれば、 first partially contained childcommon ancestorのうち 部分的に包含されるものの最初のものとする。
  9. last partially contained childをnullにする。
    1. original end nodenot 包括的祖先であれば、 last partially contained childcommon ancestorのうち 部分的に包含されるものの最後のものとする。

      これらの変数代入は常に妥当です。 例えば、original start node包括的祖先でない場合、 original start node自身がrange内で 部分的に包含されることになり、 その祖先も同様にcommon ancestorまで遡る。 common ancestororiginal start node自体にはならず、 包括的祖先である必要がある。もう一方のパターンも同様で、 両方が定義されている場合は二つのは一致しない。

  10. contained childrencommon ancestorのうち 包含されるもの(ツリー順)とするリストにする。
  11. contained childrenのどれかがdoctypeなら、 HierarchyRequestError HierarchyRequestError DOMExceptionをスローする。

    最初や最後の部分的に包含されるノードについては心配不要です。 doctypeは部分的に包含されることがなく、 範囲の境界点にもならず、何かの祖先にもなりません。

  12. original start node包括的祖先であれば new nodeoriginal start nodenew offsetoriginal start offsetとする。
    1. reference nodeoriginal start nodeとする。
    2. reference nodeがnullでなく、 包括的祖先でない間、 reference nodeをそのにする。
    3. new nodereference nodenew offsetreference nodeインデックス+1とする。

      reference nodeがnullなら ルート なのでrange包括的祖先となり、 original end nodeに到達できない。

  13. first partially contained childCharacterData ノードの場合:

    この場合、first partially contained childoriginal start nodeです。

    1. clone複製(ノードoriginal start node)とする。

    2. clonedata部分文字列取得(ノードoriginal start node、オフセット original start offset、カウントoriginal start node長さoriginal start offset)の結果に設定する。

    3. appendclonefragmentへ追加。

    4. データ置換 (ノードoriginal start node、オフセット original start offset、カウントoriginal start node長さoriginal start offset、データ空文字列)を実行。

  14. それ以外でfirst partially contained childがnullでない場合:
    1. clone複製(ノードfirst partially contained child)とする。
    2. appendclonefragmentへ追加。
    3. subrangeを新しいライブ範囲(開始は (original start node, original start offset)、終了は (first partially contained child, first partially contained child長さ))とする。
    4. subfragment抽出subrange)の結果とする。

    5. appendsubfragmentcloneへ追加。
  15. contained children内の各contained childappendfragmentへ追加。
  16. last partially contained childCharacterData ノードの場合:

    この場合、last partially contained childoriginal end nodeです。

    1. clone複製(ノードoriginal end node)とする。
    2. clonedata部分文字列取得(ノード original end node、オフセット0、カウント original end offset)の結果に設定する。
    3. appendclonefragmentへ追加。
    4. データ置換 (ノードoriginal end node、オフセット0、カウント original end offset、データ空文字列)を実行。
  17. それ以外でlast partially contained childがnullでない場合:
    1. clone複製(ノードlast partially contained child)とする。
    2. appendclonefragmentへ追加。
    3. subrangeを新しいライブ範囲(開始は (last partially contained child, 0)、終了は (original end node, original end offset))とする。
    4. subfragment抽出subrange)の結果とする。

    5. appendsubfragmentcloneへ追加。
  18. range開始終了を (new node, new offset)に設定する。
  19. fragmentを返す。

extractContents()メソッドの手順は、抽出this)の結果を返すことです。

内容を複製する には、ライブ範囲 rangeに対して以下の手順を実行します:

  1. fragmentを新しいDocumentFragment ノードノード文書range開始ノードノード文書)とする。

  2. range折り畳み済みならfragmentを返す。

  3. original start nodeoriginal start offsetoriginal end nodeoriginal end offsetrange開始ノード開始オフセット終了ノード終了オフセットとする。
  4. original start nodeoriginal end nodeと等しく、 かつCharacterData ノードの場合:

    1. clone複製(ノードoriginal start node)とする。
    2. clonedata部分文字列取得(ノード original start node、オフセット original start offset、カウント original end offsetoriginal start offset)の結果に設定する。
    3. appendclonefragmentへ追加。
    4. fragmentを返す。
  5. common ancestororiginal start nodeとする。
  6. common ancestororiginal end node包括的祖先でない間、 common ancestorをそのにする。
  7. first partially contained childをnullにする。
  8. original start nodenot 包括的祖先であれば、 first partially contained childcommon ancestorのうち 部分的に包含されるものの最初のものとする。
  9. last partially contained childをnullにする。
    1. original end nodenot 包括的祖先であれば、 last partially contained childcommon ancestorのうち 部分的に包含されるものの最後のものとする。

      これらの変数代入は常に妥当です。 例えば、original start node包括的祖先でない場合、 original start node自身がrange内で 部分的に包含されることになり、 その祖先も同様にcommon ancestorまで遡る。 common ancestororiginal start node自体にはならず、 包括的祖先である必要がある。もう一方のパターンも同様で、 両方が定義されている場合は二つのは一致しない。

  10. contained childrencommon ancestorのうち 包含されるもの(ツリー順)とするリストにする。
  11. contained childrenのどれかがdoctypeなら、 HierarchyRequestError HierarchyRequestError DOMExceptionをスローする。

    最初や最後の部分的に包含されるノードについては心配不要です。 doctypeは部分的に包含されることがなく、 範囲の境界点にもならず、何かの祖先にもなりません。

  12. first partially contained childCharacterData ノードの場合:

    この場合、first partially contained childoriginal start nodeです。

    1. clone複製(ノードoriginal start node)とする。

    2. clonedata部分文字列取得(ノードoriginal start node、オフセット original start offset、カウントoriginal start node長さoriginal start offset)の結果に設定する。

    3. appendclonefragmentへ追加。

  13. それ以外でfirst partially contained childがnullでない場合:
    1. clone複製(ノードfirst partially contained child)とする。
    2. appendclonefragmentへ追加。
    3. subrangeを新しいライブ範囲(開始は (original start node, original start offset)、終了は (first partially contained child, first partially contained child長さ))とする。
    4. subfragment内容を複製subrange)の結果とする。

    5. appendsubfragmentcloneへ追加。
  14. contained children内の各contained childについて:
    1. clone複製(ノードcontained child子複製フラグ付き)とする。
    2. appendclonefragmentへ追加。
  15. last partially contained childCharacterData ノードの場合:

    この場合、last partially contained childoriginal end nodeです。

    1. clone複製(ノードoriginal end node)とする。
    2. clonedata部分文字列取得(ノード original end node、オフセット0、カウント original end offset)の結果に設定する。
    3. appendclonefragmentへ追加。
  16. それ以外でlast partially contained childがnullでない場合:
    1. clone複製(ノードlast partially contained child)とする。
    2. appendclonefragmentへ追加。
    3. subrangeを新しいライブ範囲(開始は (last partially contained child, 0)、終了は (original end node, original end offset))とする。
    4. subfragment内容を複製subrange)の結果とする。

    5. appendsubfragmentcloneへ追加。
  17. fragmentを返す。

cloneContents()メソッドの手順は、内容を複製this)の結果を返すことです。

挿入は、ノード nodeライブ範囲 rangeに挿入する手順です:

  1. range開始ノードProcessingInstructionComment ノードText ノードで親がnull、 またはnode自身の場合は、HierarchyRequestError HierarchyRequestError DOMExceptionをスローする。
  2. referenceNodeをnullにする。
  3. range開始ノードText ノードなら、 referenceNodeをそのText ノードにする。
  4. それ以外なら、referenceNode開始ノードインデックス開始オフセットのもの、 該当する子がなければnullにする。
  5. parentreferenceNodeがnullならrange開始ノード、 そうでなければreferenceNodeにする。
  6. 挿入前の妥当性確認nodeparentreferenceNodeに対して行う。
  7. range開始ノードText ノードなら、 referenceNode分割(オフセットはrange開始オフセット)の結果にする。
  8. nodereferenceNodeの場合は、referenceNodeをその次兄弟にする。
  9. nodeがnullでない場合は、 除去する。
  10. newOffsetreferenceNodeがnullならparent長さ、そうでなければreferenceNodeインデックスにする。
  11. nodeDocumentFragment ノードなら、 newOffsetnode長さを加算、 そうでなければ1加算する。
  12. pre-insertnodeparentreferenceNodeの前に挿入する。
  13. range折り畳み済みなら、 range終了を (parent, newOffset)に設定する。

insertNode(node)メソッドの手順は、 挿入 (node, this)を実行することです。

surroundContents(newParent)メソッド手順は:

  1. Text ノード部分的に包含される場合、 InvalidStateError InvalidStateError DOMExceptionをスローする。

  2. newParentDocumentDocumentTypeDocumentFragment ノードの場合は、 InvalidNodeTypeError InvalidNodeTypeError DOMExceptionをスローする。

    歴史的理由によりCharacterData ノードはここではチェックされず、後で副作用として例外が投げられます。

  3. fragment抽出this)の結果にする。

  4. newParentを持つ場合、 replace all (null) をnewParent内で実行する。

  5. 挿入newParentthisに挿入する。

  6. appendfragmentnewParentへ追加する。

  7. 選択newParentthis内で選択する。

cloneRange()メソッドの手順は、新しい ライブ範囲(開始・終了は開始終了thisと同じ)を返すことです。

detach()メソッドの手順は何もしないことです。 この機能(Rangeオブジェクトの無効化)は削除されましたが、 メソッド自体は互換性のため残されています。


position = range . comparePoint(node, offset)
点が範囲より前なら−1、範囲内なら0、後なら1を返します。
intersects = range . intersectsNode(node)
rangenodeと交差するかどうかを返します。

isPointInRange(node, offset) メソッドの手順は:

  1. nodeルートthisルートと異なればfalseを返す。
  2. nodedoctypeなら、InvalidNodeTypeError InvalidNodeTypeError DOMExceptionをスローする。
  3. offsetnode長さより大きい場合、 IndexSizeError IndexSizeError DOMExceptionをスローする。

  4. (node, offset)が 開始または 終了の場合はfalse。
  5. trueを返す。

comparePoint(node, offset) メソッドの手順は:

  1. nodeルートthisルートと異なる場合、 WrongDocumentError WrongDocumentError DOMExceptionをスローする。
  2. nodedoctypeの場合、 InvalidNodeTypeError InvalidNodeTypeError DOMExceptionをスローする。
  3. offsetnode長さより大きい場合、 IndexSizeError IndexSizeError DOMExceptionをスローする。

  4. (node, offset)が 開始なら−1。
  5. (node, offset)が 終了なら1。
  6. 0を返す。

intersectsNode(node) メソッドの手順は:

  1. nodeルートthisルートと異なればfalse。
  2. parentnodeとする。
  3. parentがnullならtrue。
  4. offsetnodeインデックスとする。
  5. (parent, offset)が 終了かつ (parent, offset+1)が 開始ならtrue。
  6. false。

文字列化挙動は以下の手順を実行すること:

  1. sを空文字列とする。

  2. this開始ノードthis終了ノードと同じで Text ノードなら、 そのText ノードdatathis開始オフセットから this終了オフセットまでの部分文字列を返す。

  3. this開始ノードText ノードなら そのノードdatathis開始オフセットから末尾までの部分文字列をsに追加。

  4. 全てのText ノード包含されるもの(this内、ツリー順)の data連結してsに追加。

  5. this終了ノードText ノードなら そのノードdataの先頭から this終了オフセットまでの部分文字列をsに追加。

  6. sを返す。


createContextualFragment()getClientRects()getBoundingClientRect() メソッドは他の仕様で定義されています。 [DOM-Parsing] [CSSOM-VIEW]

6. 走査

NodeIterator および TreeWalker オブジェクトは、ノード ツリーをフィルターし走査するために利用できます。

NodeIterator および TreeWalker オブジェクトは、再帰的な呼び出しを防ぐための activeフラグ を持ちます。初期状態では未設定です。

NodeIterator および TreeWalker オブジェクトはさらに、 rootノード)、whatToShow(ビットマスク)、および filter(コールバック)を持ちます。

フィルターノード nodeに対して NodeIterator または TreeWalker オブジェクト traverser 内で適用するには、以下の手順を実行します:

  1. traverseractiveフラグが設定されていれば、 "InvalidStateError" DOMExceptionをスローする。

  2. nnodenodeType 属性値 − 1 とする。

  3. traverserwhatToShown番目のビット(0が最下位ビット)が設定されていなければ、 FILTER_SKIPを返す。

  4. traverserfilterがnullなら FILTER_ACCEPTを返す。

  5. traverseractiveフラグを設定する。

  6. resultユーザーオブジェクトのoperationを呼び出す (traverserfilter, "acceptNode", « node ») の戻り値とする。 もし例外がスローされた場合は、traverseractiveフラグを解除し、その例外を再スローする。

  7. traverseractiveフラグを解除する。

  8. resultを返す。

6.1. インターフェイス NodeIterator

[Exposed=Window]
interface NodeIterator {
  [SameObject] readonly attribute Node root;
  readonly attribute Node referenceNode;
  readonly attribute boolean pointerBeforeReferenceNode;
  readonly attribute unsigned long whatToShow;
  readonly attribute NodeFilter? filter;

  Node? nextNode();
  Node? previousNode();

  undefined detach();
};

NodeIterator オブジェクトは createNodeIterator() メソッドをDocument オブジェクト上で使って生成できます。

NodeIterator オブジェクトには関連する iterator collectioncollectionNodeIterator オブジェクトのrootをルートとし、 フィルターはすべてのノードに一致)を持ちます。

NodeIterator オブジェクトにはさらに、関連する referenceノード)および pointer before reference(boolean)も持ちます。

前述の通り、NodeIterator オブジェクトには activeフラグrootwhatToShowfilter も関連付けられています。

NodeIterator 除去前手順 は、nodeIteratortoBeRemovedNodeを与え、以下の通りです:

  1. toBeRemovedNodenodeIteratorreference包括的祖先でないか、 toBeRemovedNodenodeIteratorrootならreturn。

  2. nodeIteratorpointer before referenceがtrueなら:

    1. nexttoBeRemovedNodeの最初のfollowing ノードで、 nodeIteratorroot包括的子孫であり、 toBeRemovedNode包括的子孫でないものとし、 該当がなければnull。

    2. nextがnullでなければnodeIteratorreferencenextにしてreturn。

    3. それ以外の場合は、nodeIteratorpointer before referenceを falseにする。

      この時点で手順は終了しません。

  3. toBeRemovedNode前の兄弟 が null の場合、 nodeIterator参照toBeRemovedNode に設定し、それ以外の場合は、 toBeRemovedNode前の兄弟包括的子孫木の順序で最後に現れるものに設定する。


rootゲッター手順は thisrootを返すこと。

referenceNodeゲッター手順は thisreferenceを返すこと。

pointerBeforeReferenceNodeゲッター手順は thispointer before referenceを返すこと。

whatToShowゲッター手順は thiswhatToShowを返すこと。

filterゲッター手順は thisfilterを返すこと。

走査は、 NodeIterator オブジェクト iteratorと方向directionを与えて、以下の手順を実行する:

  1. nodeiteratorreferenceとする。

  2. beforeNodeiteratorpointer before referenceとする。

  3. while true:

    1. directionで分岐:

      next

      beforeNodeがfalseなら、nodeiteratoriterator collectionnodeの最初のfollowingノードにする。該当がなければnullを返す。

      beforeNodeがtrueならfalseにする。

      previous

      beforeNodeがtrueなら、nodeiteratoriterator collectionnodeの最初のprecedingノードにする。該当がなければnullを返す。

      beforeNodeがfalseならtrueにする。

    2. resultiterator内でnodeフィルターした結果とする。

    3. resultFILTER_ACCEPTなら、 breakする。

  4. iteratorreferencenodeに設定する。

  5. iteratorpointer before referencebeforeNodeに設定する。

  6. nodeを返す。

nextNode()メソッドの手順は、 走査this, next)の結果を返すこと。

previousNode()メソッドの手順は、 走査this, previous)の結果を返すこと。

detach()メソッドの手順は何もしないこと。 NodeIterator オブジェクトの無効化機能は削除されましたが、互換性のためメソッド自体は残されています。)

6.2. インターフェイス TreeWalker

[Exposed=Window]
interface TreeWalker {
  [SameObject] readonly attribute Node root;
  readonly attribute unsigned long whatToShow;
  readonly attribute NodeFilter? filter;
           attribute Node currentNode;

  Node? parentNode();
  Node? firstChild();
  Node? lastChild();
  Node? previousSibling();
  Node? nextSibling();
  Node? previousNode();
  Node? nextNode();
};

TreeWalker オブジェクトは createTreeWalker() メソッドを Document オブジェクト上で利用して生成できます。

TreeWalker オブジェクトには関連する currentノード)が存在します。

前述の通り、TreeWalker オブジェクトには rootwhatToShowfilter も関連付けられています。

rootゲッター手順は thisrootを返すこと。

whatToShowゲッター手順は thiswhatToShowを返すこと。

filterゲッター手順は thisfilterを返すこと。

currentNodeゲッター手順は thiscurrentを返すこと。

currentNode セッター手順は thiscurrentを与えられた値に設定すること。


parentNode()メソッド手順は:

  1. nodethiscurrentとする。

  2. nodeがnullでなく、かつthisrootでない間:

    1. nodenodeに設定する。

    2. nodeがnullでなく、かつnodeフィルターthis内)した結果が FILTER_ACCEPTなら、 thiscurrentnodeにし、nodeを返す。

  3. nullを返す。

子を走査するwalkertypeを与え、以下の手順を実行する:

  1. nodewalkercurrentとする。

  2. typeがfirstならnodenodefirst childに、 lastならnodenodelast childに設定する。

  3. nodeがnullでない間:

    1. resultnodewalker内でフィルターした結果とする。

    2. resultFILTER_ACCEPTなら walkercurrentnodeにし、nodeを返す。

    3. resultFILTER_SKIPの場合:

      1. typeがfirstならchildnodefirst childに、 lastならchildnodelast childに設定する。

      2. childがnullでなければnodechildに設定し、 continueする。

    4. nodeがnullでない間:

      1. typeがfirstならsiblingnodenext siblingに、 lastならsiblingnodeprevious siblingに設定する。

      2. siblingがnullでなければnodesiblingに設定し、 breakする。

      3. parentnodeとする。

      4. parentがnull、walkerroot、 またはwalkercurrentならnullを返す。

      5. nodeparentに設定する。

  4. nullを返す。

firstChild()メソッド手順は 子を走査するthis, first)を実行すること。

lastChild()メソッド手順は 子を走査するthis, last)を実行すること。

兄弟を走査するwalkertypeを与え、以下の手順を実行する:

  1. nodewalkercurrentとする。

  2. noderootならnullを返す。

  3. while true:

    1. typeがnextならsiblingnodenext siblingに、 previousならsiblingnodeprevious siblingに設定する。

    2. siblingがnullでない間:

      1. nodesiblingに設定する。

      2. resultnodewalker内でフィルターした結果とする。

      3. resultFILTER_ACCEPTなら walkercurrentnodeにし、nodeを返す。

      4. typeがnextならsiblingnodefirst childに、 previousならsiblingnodelast childに設定する。

      5. resultFILTER_REJECT またはsiblingがnullなら typeがnextならsiblingnodenext siblingに、 previousならsiblingnodeprevious siblingに設定する。

    3. nodenodeに設定する。

    4. nodeがnullまたはwalkerrootならnullを返す。

    5. nodewalker内でフィルターした結果が FILTER_ACCEPTならnullを返す。

nextSibling()メソッド手順は 兄弟を走査するthis, next)を実行すること。

previousSibling()メソッド手順は 兄弟を走査するthis, previous)を実行すること。

previousNode()メソッド手順は:

  1. nodethiscurrentとする。

  2. nodethisrootでない間:

    1. siblingnodeprevious siblingに設定する。

    2. siblingがnullでない間:

      1. nodesiblingに設定する。

      2. resultnodeフィルターthis内)した結果とする。

      3. resultFILTER_REJECT でなく、かつnodeを持つ間:

        1. nodenodelast childに設定する。

        2. resultnodeフィルターthis内)した結果に設定する。

      4. resultFILTER_ACCEPTなら、 thiscurrentnodeにし、nodeを返す。

      5. siblingnodeprevious siblingに設定する。

    3. nodethisrootまたはnodeがnullならnullを返す。

    4. nodenodeに設定する。

    5. nodeフィルターthis内)した結果が FILTER_ACCEPTなら thiscurrentnodeにし、nodeを返す。

  3. nullを返す。

nextNode()メソッド手順は:

  1. nodethiscurrentとする。

  2. resultFILTER_ACCEPTにする。

  3. while true:

    1. resultFILTER_REJECTでなく、 かつnodeを持つ間:

      1. nodenodefirst childに設定する。

      2. resultnodeフィルターthis内)した結果に設定する。

      3. resultFILTER_ACCEPTなら thiscurrentnodeにし、nodeを返す。

    2. siblingをnullにする。

    3. temporarynodeにする。

    4. temporaryがnullでない間:

      1. temporarythisrootならnullを返す。

      2. siblingtemporarynext siblingに設定する。

      3. siblingがnullでなければnodesiblingに設定し、 breakする。

      4. temporarytemporaryに設定する。

    5. resultnodeフィルターthis内)した結果に設定する。

    6. resultFILTER_ACCEPTなら thiscurrentnodeにし、nodeを返す。

6.3. インターフェイス NodeFilter

[Exposed=Window]
callback interface NodeFilter {
  // Constants for acceptNode()
  const unsigned short FILTER_ACCEPT = 1;
  const unsigned short FILTER_REJECT = 2;
  const unsigned short FILTER_SKIP = 3;

  // Constants for whatToShow
  const unsigned long SHOW_ALL = 0xFFFFFFFF;
  const unsigned long SHOW_ELEMENT = 0x1;
  const unsigned long SHOW_ATTRIBUTE = 0x2;
  const unsigned long SHOW_TEXT = 0x4;
  const unsigned long SHOW_CDATA_SECTION = 0x8;
  const unsigned long SHOW_ENTITY_REFERENCE = 0x10; // legacy
  const unsigned long SHOW_ENTITY = 0x20; // legacy
  const unsigned long SHOW_PROCESSING_INSTRUCTION = 0x40;
  const unsigned long SHOW_COMMENT = 0x80;
  const unsigned long SHOW_DOCUMENT = 0x100;
  const unsigned long SHOW_DOCUMENT_TYPE = 0x200;
  const unsigned long SHOW_DOCUMENT_FRAGMENT = 0x400;
  const unsigned long SHOW_NOTATION = 0x800; // legacy

  unsigned short acceptNode(Node node);
};

NodeFilter オブジェクトは、filterとして NodeIteratorTreeWalker オブジェクトに利用でき、さらに whatToShowビットマスク用の定数も提供します。 NodeFilter オブジェクトは通常、JavaScript関数として実装されます。

以下の定数はfilterの戻り値として利用できます:

以下の定数はwhatToShowに利用できます:

7. 集合

DOMTokenList という名前は、残念ながらレガシーの名残りです。

7.1. インターフェイス DOMTokenList

[Exposed=Window]
interface DOMTokenList {
  readonly attribute unsigned long length;
  getter DOMString? item(unsigned long index);
  boolean contains(DOMString token);
  [CEReactions] undefined add(DOMString... tokens);
  [CEReactions] undefined remove(DOMString... tokens);
  [CEReactions] boolean toggle(DOMString token, optional boolean force);
  [CEReactions] boolean replace(DOMString token, DOMString newToken);
  boolean supports(DOMString token);
  [CEReactions] stringifier attribute DOMString value;
  iterable<DOMString>;
};

DOMTokenList オブジェクトは、 トークン集合集合)を持ちます。初期状態では空です。

DOMTokenList オブジェクトはさらに、関連付けられた要素と、関連付けられた属性ローカル名も持ちます。

他の仕様では、 サポートされるトークンを、 DOMTokenListの関連付けられた 属性ローカル名に定義できる場合があります。

DOMTokenList オブジェクトの 検証手順は、指定された tokenに対して以下の通りです:

  1. 関連付けられた属性ローカル名サポートされるトークンが定義されていなければ、TypeErrorをスローする。

  2. lowercase tokentokenASCII 小文字にしたコピーとする。

  3. lowercase tokenサポートされるトークンに含まれていれば、trueを返す。

  4. falseを返す。

DOMTokenList オブジェクトの 更新手順 は以下の通りです:

  1. 関連付けられた要素が関連付けられた属性を持たず、 トークン集合が 空であれば、returnする。

  2. 関連付けられた属性値設定を関連付けられた 要素に対し、 関連付けられた属性ローカル名と、 順序集合シリアライザートークン集合の実行結果を利用して設定する。

DOMTokenList オブジェクトの直列化手順は、 関連付けられた属性値取得(関連付けられた 要素と 関連付けられた属性ローカル名を指定)実行結果を返すこと。


DOMTokenList オブジェクトには、関連付けられた 属性変更手順があります:

  1. localNameが関連付けられた属性のローカル名で、 namespaceがnull、valueがnullなら、 空にする トークン集合

  2. それ以外でlocalNameが関連付けられた属性のローカル名で、 namespaceがnullなら、 トークン集合valueパース済みに設定する。

DOMTokenList オブジェクトが作成される際は以下の通りです:

  1. elementを関連付けられた要素にする。

  2. localNameを関連付けられた属性のローカル名にする。

  3. value属性値取得elementlocalName指定)実行結果にする。

  4. 属性変更手順elementlocalNamevaluevalue、nullで実行する。

tokenlist . length

トークン数を返す。

tokenlist . item(index)
tokenlist[index]

index番目のトークンを返す。

tokenlist . contains(token)

tokenが存在するならtrue、そうでなければfalseを返す。

tokenlist . add(tokens…)

既に存在しないものを除き、全ての引数を追加する。

引数に空文字列が含まれていれば"SyntaxError" DOMException をスローする。

引数にASCII whitespaceが含まれていれば"InvalidCharacterError" DOMException をスローする。

tokenlist . remove(tokens…)

渡された引数を、存在すれば削除する。

引数に空文字列が含まれていれば"SyntaxError" DOMException をスローする。

引数にASCII whitespaceが含まれていれば"InvalidCharacterError" DOMException をスローする。

tokenlist . toggle(token [, force])

forceが与えられない場合はtokenを「トグル」し、存在すれば削除、存在しなければ追加する。forceがtrueならtokenを追加 (add()と同じ)。 forceがfalseならtokenを削除 (remove()と同じ)。

tokenが現在存在すればtrue、そうでなければfalseを返す。

tokenが空文字列なら"SyntaxError" DOMException をスローする。

tokenにスペースが含まれていれば"InvalidCharacterError" DOMException をスローする。

tokenlist . replace(token, newToken)

tokennewTokenで置き換える。

tokennewTokenに置き換わればtrue、そうでなければfalse。

引数に空文字列が含まれていれば"SyntaxError" DOMException をスローする。

引数にASCII whitespaceが含まれていれば"InvalidCharacterError" DOMException をスローする。

tokenlist . supports(token)

関連付けられた属性のサポートされるトークンにtokenがあればtrue、そうでなければfalseを返す。

関連付けられた属性にサポートされるトークンが定義されていなければTypeErrorをスローする。

tokenlist . value

関連付けられた集合を文字列で返す。

値として設定することで、関連付けられた属性を変更できる。

length属性のゲッターは thisトークン集合サイズを返すこと。

オブジェクトのサポートされるプロパティインデックスは、 0からオブジェクトのトークン集合サイズ−1までの数値ですが、 トークン集合空の場合はプロパティインデックスはありません。

item(index)メソッドの手順は:

  1. indexthisトークン集合サイズ以上ならnullを返す。

  2. thisトークン集合[index]を返す。

contains(token)メソッドの手順は thisトークン集合[token]が存在すればtrue、そうでなければfalseを返すこと。

add(tokens…) メソッドの手順は:

  1. tokens内の各tokenについて:

    1. tokenが空文字列ならSyntaxErrorをスローする。

    2. tokenASCII whitespaceが含まれていればInvalidCharacterErrorをスローする。

  2. tokens内の各tokenについて、 トークン追加thisトークン集合に対して実行する。

  3. 更新手順を実行する。

remove(tokens…) メソッドの手順は:

  1. tokens内の各tokenについて:

    1. tokenが空文字列ならSyntaxErrorをスローする。

    2. tokenASCII whitespaceが含まれていればInvalidCharacterErrorをスローする。

  2. tokens内の各tokenについて、 トークン削除thisトークン集合から実行する。

  3. 更新手順を実行する。

toggle(token, force) メソッドの手順は:

  1. tokenが空文字列ならSyntaxErrorをスローする。

  2. tokenASCII whitespaceが含まれていればInvalidCharacterErrorをスローする。

  3. thisトークン集合[token]が存在する場合:

    1. forceが与えられていないかfalseなら、 トークン削除tokenに対して実行し、更新手順を実行し、falseを返す。

    2. trueを返す。

  4. それ以外でforceが与えられていないかtrueなら、 トークン追加tokenに対して実行し、更新手順を実行し、trueを返す。

  5. falseを返す。

更新手順はweb互換性のためtoggle() で常に実行されるわけではありません。

replace(token, newToken) メソッドの手順は:

  1. tokenまたはnewTokenが空文字列ならSyntaxErrorをスローする。

  2. tokenまたはnewTokenASCII whitespaceが含まれていればInvalidCharacterErrorをスローする。

  3. thisトークン集合token含まないなら、 falseを返す。

  4. 置換tokenthisトークン集合内で newTokenに置き換える。

  5. 更新手順を実行する。

  6. trueを返す。

更新手順はweb互換性のためreplace() で常に実行されるわけではありません。

supports(token) メソッドの手順は:

  1. result検証手順(引数はtoken)の返り値とする。

  2. resultを返す。

value属性は this直列化手順の実行結果を返すこと。

value 属性に値を設定すると、関連付けられた属性値設定を 関連付けられた要素に対し、 関連付けられた属性ローカル名と 与えられた値を利用して設定する。

8. XPath

DOM Level 3 XPathXPath 1.0 式の評価APIを定義しました。これらのAPIは広く実装されていますが、保守されていません。インターフェイス定義はWeb IDLの変更時に更新できるようここで維持されています。 これらAPIの完全な定義は依然必要であり、その作業はwhatwg/dom#67で追跡およびコントリビュートできます。 [DOM-Level-3-XPath] [XPath] [WEBIDL]

8.1. インターフェイス XPathResult

[Exposed=Window]
interface XPathResult {
  const unsigned short ANY_TYPE = 0;
  const unsigned short NUMBER_TYPE = 1;
  const unsigned short STRING_TYPE = 2;
  const unsigned short BOOLEAN_TYPE = 3;
  const unsigned short UNORDERED_NODE_ITERATOR_TYPE = 4;
  const unsigned short ORDERED_NODE_ITERATOR_TYPE = 5;
  const unsigned short UNORDERED_NODE_SNAPSHOT_TYPE = 6;
  const unsigned short ORDERED_NODE_SNAPSHOT_TYPE = 7;
  const unsigned short ANY_UNORDERED_NODE_TYPE = 8;
  const unsigned short FIRST_ORDERED_NODE_TYPE = 9;

  readonly attribute unsigned short resultType;
  readonly attribute unrestricted double numberValue;
  readonly attribute DOMString stringValue;
  readonly attribute boolean booleanValue;
  readonly attribute Node? singleNodeValue;
  readonly attribute boolean invalidIteratorState;
  readonly attribute unsigned long snapshotLength;

  Node? iterateNext();
  Node? snapshotItem(unsigned long index);
};

8.2. インターフェイス XPathExpression

[Exposed=Window]
interface XPathExpression {
  // XPathResult.ANY_TYPE = 0
  XPathResult evaluate(Node contextNode, optional unsigned short type = 0, optional XPathResult? result = null);
};

8.3. ミックスイン XPathEvaluatorBase

callback interface XPathNSResolver {
  DOMString? lookupNamespaceURI(DOMString? prefix);
};

interface mixin XPathEvaluatorBase {
  [NewObject] XPathExpression createExpression(DOMString expression, optional XPathNSResolver? resolver = null);
  Node createNSResolver(Node nodeResolver); // legacy
  // XPathResult.ANY_TYPE = 0
  XPathResult evaluate(DOMString expression, Node contextNode, optional XPathNSResolver? resolver = null, optional unsigned short type = 0, optional XPathResult? result = null);
};
Document includes XPathEvaluatorBase;

createNSResolver(nodeResolver) メソッド手順はnodeResolverを返すこと。

このメソッドは歴史的理由で存在しています。

8.4. インターフェイス XPathEvaluator

[Exposed=Window]
interface XPathEvaluator {
  constructor();
};

XPathEvaluator includes XPathEvaluatorBase;

歴史的理由により、XPathEvaluator をコンストラクトすることも、同じ メソッドにDocument 上からアクセスすることもできます。

9. XSLT

XSL Transformations (XSLT)はXML文書を他のXML文書に変換する言語です。 この章で定義されているAPIは広く実装されており、Web IDLの変更時に更新できるようここで維持されています。APIの完全な定義は依然として必要であり、その作業は whatwg/dom#181で追跡およびコントリビュート可能です。 [XSLT]

9.1. インターフェイス XSLTProcessor

[Exposed=Window]
interface XSLTProcessor {
  constructor();
  undefined importStylesheet(Node style);
  [CEReactions] DocumentFragment transformToFragment(Node source, Document output);
  [CEReactions] Document transformToDocument(Node source);
  undefined setParameter([LegacyNullToEmptyString] DOMString namespaceURI, DOMString localName, any value);
  any getParameter([LegacyNullToEmptyString] DOMString namespaceURI, DOMString localName);
  undefined removeParameter([LegacyNullToEmptyString] DOMString namespaceURI, DOMString localName);
  undefined clearParameters();
  undefined reset();
};

10. セキュリティとプライバシーの考慮事項

この標準には、既知のセキュリティやプライバシーの考慮事項はありません。

11. 歴史的事項

この標準には、かつて含まれていたが削除された複数のインターフェイスやインターフェイスメンバーがあります。

以下のインターフェイスは削除されました:

また、以下のインターフェイスメンバーが削除されました:

Attr
  • schemaTypeInfo
  • isId
Document
  • createEntityReference()
  • xmlEncoding
  • xmlStandalone
  • xmlVersion
  • strictErrorChecking
  • domConfig
  • normalizeDocument()
  • renameNode()
DocumentType
  • entities
  • notations
  • internalSubset
DOMImplementation
  • getFeature()
Element
  • schemaTypeInfo
  • setIdAttribute()
  • setIdAttributeNS()
  • setIdAttributeNode()
Node
  • isSupported
  • getFeature()
  • getUserData()
  • setUserData()
NodeIterator
  • expandEntityReferences
Text
  • isElementContentWhitespace
  • replaceWholeText()
TreeWalker
  • expandEntityReferences

謝辞

DOM の相互運用性向上に長年にわたり貢献してくださった多くの方々に感謝します。同様に、この標準が今日の形となるまで支えてくださった方々にも感謝いたします。

以下の皆様に心より感謝いたします: Adam Klein、 Adrian Bateman、 Ahmid snuggs、 Alex Komoroske、 Alex Russell、 Alexey Shvayka、 Andreas Kling、 Andreu Botella、 Anthony Ramine、 Arkadiusz Michalski、 Arnaud Le Hors、 Arun Ranganathan、 Benjamin Gruenbaum、 Björn Höhrmann、 Boris Zbarsky、 Brandon Payton、 Brandon Slade、 Brandon Wallace、 Brian Kardell、 C. Scott Ananian、 Cameron McCormack、 Chris Dumez、 Chris Paris、 Chris Rebert、 Cyrille Tuzi、 Dan Burzo、 Daniel Clark、 Daniel Glazman、 Darien Maillet Valentine、 Darin Fisher、 David Baron、 David Bruant、 David Flanagan、 David Håsäther、 David Hyatt、 Deepak Sherveghar、 Dethe Elza、 Dimitri Glazkov、 Domenic Denicola、 Dominic Cooney、 Dominique Hazaël-Massieux、 Don Jordan、 Doug Schepers、 Edgar Chen、 Elisée Maurer、 Elliott Sprehn、 Emilio Cobos Álvarez、 Eric Bidelman、 Erik Arvidsson、 François Daoust、 François Remy、 Gary Kacmarcik、 Gavin Nicol、 Giorgio Liscio、 Glen Huang、 Glenn Adams、 Glenn Maynard、 Hajime Morrita、 Harald Alvestrand、 Hayato Ito、 Henri Sivonen、 Hongchan Choi、 Hunan Rostomyan、 Ian Hickson、 Igor Bukanov、 Jacob Rossi、 Jake Archibald、 Jake Verbaten、 James Graham、 James Greene、 James M Snell、 James Robinson、 Jeffrey Yasskin、 Jens Lindström、 Jeremy Davis、 Jesse McCarthy、 Jinho Bang、 João Eiras、 Joe Kesselman、 John Atkins、 John Dai、 Jonas Sicking、 Jonathan Kingston、 Jonathan Robie、 Joris van der Wel、 Joshua Bell、 J. S. Choi、 Jungkee Song、 Justin Summerlin、 Kagami Sascha Rosylight、 呂康豪 (Kang-Hao Lu)、 田村健人 (Kent TAMURA)、 Kevin J. Sung、 Kevin Sweeney、 Kirill Topolyan、 Koji Ishii、 Lachlan Hunt、 Lauren Wood、 Luca Casonato、 Luke Zielinski、 Magne Andersson、 Majid Valipour、 Malte Ubl、 Manish Goregaokar、 Manish Tripathi、 Marcos Caceres、 Mark Miller、 Martijn van der Ven、 Mason Freed、 Mats Palmgren、 Mounir Lamouri、 Michael Stramel、 Michael™ Smith、 Mike Champion、 Mike Taylor、 Mike West、 Nicolás Peña Moreno、 Nidhi Jaju、 Ojan Vafai、 Oliver Nightingale、 Olli Pettay、 Ondřej Žára、 Peter Sharpe、 Philip Jägenstedt、 Philippe Le Hégaret、 Piers Wombwell、 Pierre-Marie Dartus、 prosody—Gab Vereable Context(、 Rafael Weinstein、 Rakina Zata Amni、 Richard Bradshaw、 Rick Byers、 Rick Waldron、 Robbert Broersma、 Robin Berjon、 Roland Steiner、 Rune F. Halvorsen、 Russell Bicknell、 Ruud Steltenpool、 Ryosuke Niwa、 Sam Dutton、 Sam Sneddon、 Samuel Giles、 Sanket Joshi、 Scott Haseley、 Sebastian Mayr、 Seo Sanghyeon、 Sergey G. Grekhov、 Shiki Okasaka、 Shinya Kawanaka、 Simon Pieters、 Simon Wülker、 Stef Busking、 Steve Byrne、 Stig Halvorsen、 Tab Atkins、 Takashi Sakamoto、 Takayoshi Kochi、 Theresa O’Connor、 Theodore Dubois、 timeless、 Timo Tijhof、 Tobie Langel、 Tom Pixley、 Travis Leithead、 Trevor Rowbotham、 triple-underscore、 Tristan Fraipont、 Veli Şenol、 Vidur Apparao、 Warren He、 Xidorn Quan、 Yash Handa、 Yehuda Katz、 Yoav Weiss、 Yoichi Osato、 Yoshinori Sano、 Yu Han、 Yusuke Abe、 Zack Weinberg の皆様、素晴らしいご協力ありがとうございました!

この標準は Anne van Kesteren (Apple, annevk@annevk.nl) によって執筆され、 Aryeh Gregor (ayg@aryeh.name) と Ms2ger (ms2ger@gmail.com) の多大な貢献を受けています。

知的財産権

custom 要素に関連する統合ポイントのリビジョン履歴の一部は w3c/webcomponents リポジトリで確認でき、 W3C Software and Document Licenseのもとで利用可能です。

Copyright © WHATWG (Apple, Google, Mozilla, Microsoft)。この作品は クリエイティブ・コモンズ 表示 4.0 国際ライセンス の下でライセンスされています。ソースコードに組み込まれている部分については、BSD 3-Clause License の下でライセンスされます。

これはリビングスタンダードです。特許レビュー版に関心がある方は Living Standard Review Draft をご覧ください。

索引

本仕様で定義されている用語

参照によって定義される用語

参照

規範的な参照

[CONSOLE]
Dominic Farolino; Robert Kowalski; Terin Stock. コンソール標準. Living Standard. URL: https://console.spec.whatwg.org/
[DEVICE-ORIENTATION]
Reilly Grant; Marcos Caceres. デバイスの向きとモーション. URL: https://w3c.github.io/deviceorientation/
[ECMASCRIPT]
ECMAScript言語仕様. URL: https://tc39.es/ecma262/multipage/
[ENCODING]
Anne van Kesteren. エンコーディング標準. Living Standard. URL: https://encoding.spec.whatwg.org/
[HR-TIME-3]
Yoav Weiss. 高解像度時間. URL: https://w3c.github.io/hr-time/
[HTML]
Anne van Kesteren; et al. HTML標準. Living Standard. URL: https://html.spec.whatwg.org/multipage/
[INFRA]
Anne van Kesteren; Domenic Denicola. インフラストラクチャー標準. Living Standard. URL: https://infra.spec.whatwg.org/
[LONG-ANIMATION-FRAMES]
Long Animation Frames API. 編集者草案. URL: https://w3c.github.io/long-animation-frames/
[SELECTORS4]
Elika Etemad; Tab Atkins Jr.. セレクターレベル4. URL: https://drafts.csswg.org/selectors/
[SERVICE-WORKERS]
Yoshisato Yanagisawa; Monica CHINTALA. サービスワーカー. URL: https://w3c.github.io/ServiceWorker/
[TOUCH-EVENTS]
Doug Schepers; et al. タッチイベント. URL: https://w3c.github.io/touch-events/
[UIEVENTS]
Gary Kacmarcik; Travis Leithead. UIイベント. URL: https://w3c.github.io/uievents/
[URL]
Anne van Kesteren. URL標準. Living Standard. URL: https://url.spec.whatwg.org/
[WEBIDL]
Edgar Chen; Timothy Gu. Web IDL標準. Living Standard. URL: https://webidl.spec.whatwg.org/
[XML]
Tim Bray; et al. 拡張可能なマーク付け言語 (XML) 1.0 (第5版). 2008年11月26日. REC. URL: https://www.w3.org/TR/xml/
[XML-NAMES]
Tim Bray; et al. XML 1.0における名前空間 (第3版). 2009年12月8日. REC. URL: https://www.w3.org/TR/xml-names/

参考情報

[CSSOM-VIEW]
Simon Pieters. CSSOM View Module. URL: https://drafts.csswg.org/cssom-view/
[DOM-Level-3-XPath]
Ray Whitmer. Document Object Model (DOM) Level 3 XPath Specification. 2020年11月3日. NOTE. URL: https://www.w3.org/TR/DOM-Level-3-XPath/
[DOM-Parsing]
Travis Leithead. DOM Parsing and Serialization. URL: https://w3c.github.io/DOM-Parsing/
[FULLSCREEN]
Philip Jägenstedt. Fullscreen API Standard. Living Standard. URL: https://fullscreen.spec.whatwg.org/
[INDEXEDDB]
Nikunj Mehta; et al. Indexed Database API. URL: https://w3c.github.io/IndexedDB/
[XPath]
James Clark; Steven DeRose. XML Path Language (XPath) Version 1.0. 1999年11月16日. REC. URL: https://www.w3.org/TR/xpath-10/
[XSLT]
James Clark. XSL Transformations (XSLT) Version 1.0. 1999年11月16日. REC. URL: https://www.w3.org/TR/xslt-10/

IDL索引

[Exposed=*]
interface Event {
  constructor(DOMString type, optional EventInit eventInitDict = {});

  readonly attribute DOMString type;
  readonly attribute EventTarget? target;
  readonly attribute EventTarget? srcElement; // legacy
  readonly attribute EventTarget? currentTarget;
  sequence<EventTarget> composedPath();

  const unsigned short NONE = 0;
  const unsigned short CAPTURING_PHASE = 1;
  const unsigned short AT_TARGET = 2;
  const unsigned short BUBBLING_PHASE = 3;
  readonly attribute unsigned short eventPhase;

  undefined stopPropagation();
           attribute boolean cancelBubble; // legacy alias of .stopPropagation()
  undefined stopImmediatePropagation();

  readonly attribute boolean bubbles;
  readonly attribute boolean cancelable;
           attribute boolean returnValue;  // legacy
  undefined preventDefault();
  readonly attribute boolean defaultPrevented;
  readonly attribute boolean composed;

  [LegacyUnforgeable] readonly attribute boolean isTrusted;
  readonly attribute DOMHighResTimeStamp timeStamp;

  undefined initEvent(DOMString type, optional boolean bubbles = false, optional boolean cancelable = false); // legacy
};

dictionary EventInit {
  boolean bubbles = false;
  boolean cancelable = false;
  boolean composed = false;
};

partial interface Window {
  [Replaceable] readonly attribute (Event or undefined) event; // legacy
};

[Exposed=*]
interface CustomEvent : Event {
  constructor(DOMString type, optional CustomEventInit eventInitDict = {});

  readonly attribute any detail;

  undefined initCustomEvent(DOMString type, optional boolean bubbles = false, optional boolean cancelable = false, optional any detail = null); // legacy
};

dictionary CustomEventInit : EventInit {
  any detail = null;
};

[Exposed=*]
interface EventTarget {
  constructor();

  undefined addEventListener(DOMString type, EventListener? callback, optional (AddEventListenerOptions or boolean) options = {});
  undefined removeEventListener(DOMString type, EventListener? callback, optional (EventListenerOptions or boolean) options = {});
  boolean dispatchEvent(Event event);
};

callback interface EventListener {
  undefined handleEvent(Event event);
};

dictionary EventListenerOptions {
  boolean capture = false;
};

dictionary AddEventListenerOptions : EventListenerOptions {
  boolean passive;
  boolean once = false;
  AbortSignal signal;
};

[Exposed=*]
interface AbortController {
  constructor();

  [SameObject] readonly attribute AbortSignal signal;

  undefined abort(optional any reason);
};

[Exposed=*]
interface AbortSignal : EventTarget {
  [NewObject] static AbortSignal abort(optional any reason);
  [Exposed=(Window,Worker), NewObject] static AbortSignal timeout([EnforceRange] unsigned long long milliseconds);
  [NewObject] static AbortSignal _any(sequence<AbortSignal> signals);

  readonly attribute boolean aborted;
  readonly attribute any reason;
  undefined throwIfAborted();

  attribute EventHandler onabort;
};
interface mixin NonElementParentNode {
  Element? getElementById(DOMString elementId);
};
Document includes NonElementParentNode;
DocumentFragment includes NonElementParentNode;

interface mixin DocumentOrShadowRoot {
  readonly attribute CustomElementRegistry? customElementRegistry;
};
Document includes DocumentOrShadowRoot;
ShadowRoot includes DocumentOrShadowRoot;

interface mixin ParentNode {
  [SameObject] readonly attribute HTMLCollection children;
  readonly attribute Element? firstElementChild;
  readonly attribute Element? lastElementChild;
  readonly attribute unsigned long childElementCount;

  [CEReactions, Unscopable] undefined prepend((Node or DOMString)... nodes);
  [CEReactions, Unscopable] undefined append((Node or DOMString)... nodes);
  [CEReactions, Unscopable] undefined replaceChildren((Node or DOMString)... nodes);

  [CEReactions] undefined moveBefore(Node node, Node? child);

  Element? querySelector(DOMString selectors);
  [NewObject] NodeList querySelectorAll(DOMString selectors);
};
Document includes ParentNode;
DocumentFragment includes ParentNode;
Element includes ParentNode;

interface mixin NonDocumentTypeChildNode {
  readonly attribute Element? previousElementSibling;
  readonly attribute Element? nextElementSibling;
};
Element includes NonDocumentTypeChildNode;
CharacterData includes NonDocumentTypeChildNode;

interface mixin ChildNode {
  [CEReactions, Unscopable] undefined before((Node or DOMString)... nodes);
  [CEReactions, Unscopable] undefined after((Node or DOMString)... nodes);
  [CEReactions, Unscopable] undefined replaceWith((Node or DOMString)... nodes);
  [CEReactions, Unscopable] undefined remove();
};
DocumentType includes ChildNode;
Element includes ChildNode;
CharacterData includes ChildNode;

interface mixin Slottable {
  readonly attribute HTMLSlotElement? assignedSlot;
};
Element includes Slottable;
Text includes Slottable;

[Exposed=Window]
interface NodeList {
  getter Node? item(unsigned long index);
  readonly attribute unsigned long length;
  iterable<Node>;
};

[Exposed=Window, LegacyUnenumerableNamedProperties]
interface HTMLCollection {
  readonly attribute unsigned long length;
  getter Element? item(unsigned long index);
  getter Element? namedItem(DOMString name);
};

[Exposed=Window]
interface MutationObserver {
  constructor(MutationCallback callback);

  undefined observe(Node target, optional MutationObserverInit options = {});
  undefined disconnect();
  sequence<MutationRecord> takeRecords();
};

callback MutationCallback = undefined (sequence<MutationRecord> mutations, MutationObserver observer);

dictionary MutationObserverInit {
  boolean childList = false;
  boolean attributes;
  boolean characterData;
  boolean subtree = false;
  boolean attributeOldValue;
  boolean characterDataOldValue;
  sequence<DOMString> attributeFilter;
};

[Exposed=Window]
interface MutationRecord {
  readonly attribute DOMString type;
  [SameObject] readonly attribute Node target;
  [SameObject] readonly attribute NodeList addedNodes;
  [SameObject] readonly attribute NodeList removedNodes;
  readonly attribute Node? previousSibling;
  readonly attribute Node? nextSibling;
  readonly attribute DOMString? attributeName;
  readonly attribute DOMString? attributeNamespace;
  readonly attribute DOMString? oldValue;
};

[Exposed=Window]
interface Node : EventTarget {
  const unsigned short ELEMENT_NODE = 1;
  const unsigned short ATTRIBUTE_NODE = 2;
  const unsigned short TEXT_NODE = 3;
  const unsigned short CDATA_SECTION_NODE = 4;
  const unsigned short ENTITY_REFERENCE_NODE = 5; // legacy
  const unsigned short ENTITY_NODE = 6; // legacy
  const unsigned short PROCESSING_INSTRUCTION_NODE = 7;
  const unsigned short COMMENT_NODE = 8;
  const unsigned short DOCUMENT_NODE = 9;
  const unsigned short DOCUMENT_TYPE_NODE = 10;
  const unsigned short DOCUMENT_FRAGMENT_NODE = 11;
  const unsigned short NOTATION_NODE = 12; // legacy
  readonly attribute unsigned short nodeType;
  readonly attribute DOMString nodeName;

  readonly attribute USVString baseURI;

  readonly attribute boolean isConnected;
  readonly attribute Document? ownerDocument;
  Node getRootNode(optional GetRootNodeOptions options = {});
  readonly attribute Node? parentNode;
  readonly attribute Element? parentElement;
  boolean hasChildNodes();
  [SameObject] readonly attribute NodeList childNodes;
  readonly attribute Node? firstChild;
  readonly attribute Node? lastChild;
  readonly attribute Node? previousSibling;
  readonly attribute Node? nextSibling;

  [CEReactions] attribute DOMString? nodeValue;
  [CEReactions] attribute DOMString? textContent;
  [CEReactions] undefined normalize();

  [CEReactions, NewObject] Node cloneNode(optional boolean subtree = false);
  boolean isEqualNode(Node? otherNode);
  boolean isSameNode(Node? otherNode); // legacy alias of ===

  const unsigned short DOCUMENT_POSITION_DISCONNECTED = 0x01;
  const unsigned short DOCUMENT_POSITION_PRECEDING = 0x02;
  const unsigned short DOCUMENT_POSITION_FOLLOWING = 0x04;
  const unsigned short DOCUMENT_POSITION_CONTAINS = 0x08;
  const unsigned short DOCUMENT_POSITION_CONTAINED_BY = 0x10;
  const unsigned short DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = 0x20;
  unsigned short compareDocumentPosition(Node other);
  boolean contains(Node? other);

  DOMString? lookupPrefix(DOMString? namespace);
  DOMString? lookupNamespaceURI(DOMString? prefix);
  boolean isDefaultNamespace(DOMString? namespace);

  [CEReactions] Node insertBefore(Node node, Node? child);
  [CEReactions] Node appendChild(Node node);
  [CEReactions] Node replaceChild(Node node, Node child);
  [CEReactions] Node removeChild(Node child);
};

dictionary GetRootNodeOptions {
  boolean composed = false;
};

[Exposed=Window]
interface Document : Node {
  constructor();

  [SameObject] readonly attribute DOMImplementation implementation;
  readonly attribute USVString URL;
  readonly attribute USVString documentURI;
  readonly attribute DOMString compatMode;
  readonly attribute DOMString characterSet;
  readonly attribute DOMString charset; // legacy alias of .characterSet
  readonly attribute DOMString inputEncoding; // legacy alias of .characterSet
  readonly attribute DOMString contentType;

  readonly attribute DocumentType? doctype;
  readonly attribute Element? documentElement;
  HTMLCollection getElementsByTagName(DOMString qualifiedName);
  HTMLCollection getElementsByTagNameNS(DOMString? namespace, DOMString localName);
  HTMLCollection getElementsByClassName(DOMString classNames);

  [CEReactions, NewObject] Element createElement(DOMString localName, optional (DOMString or ElementCreationOptions) options = {});
  [CEReactions, NewObject] Element createElementNS(DOMString? namespace, DOMString qualifiedName, optional (DOMString or ElementCreationOptions) options = {});
  [NewObject] DocumentFragment createDocumentFragment();
  [NewObject] Text createTextNode(DOMString data);
  [NewObject] CDATASection createCDATASection(DOMString data);
  [NewObject] Comment createComment(DOMString data);
  [NewObject] ProcessingInstruction createProcessingInstruction(DOMString target, DOMString data);

  [CEReactions, NewObject] Node importNode(Node node, optional (boolean or ImportNodeOptions) options = false);
  [CEReactions] Node adoptNode(Node node);

  [NewObject] Attr createAttribute(DOMString localName);
  [NewObject] Attr createAttributeNS(DOMString? namespace, DOMString qualifiedName);

  [NewObject] Event createEvent(DOMString interface); // legacy

  [NewObject] Range createRange();

  // NodeFilter.SHOW_ALL = 0xFFFFFFFF
  [NewObject] NodeIterator createNodeIterator(Node root, optional unsigned long whatToShow = 0xFFFFFFFF, optional NodeFilter? filter = null);
  [NewObject] TreeWalker createTreeWalker(Node root, optional unsigned long whatToShow = 0xFFFFFFFF, optional NodeFilter? filter = null);
};

[Exposed=Window]
interface XMLDocument : Document {};

dictionary ElementCreationOptions {
  CustomElementRegistry customElementRegistry;
  DOMString is;
};

dictionary ImportNodeOptions {
  CustomElementRegistry customElementRegistry;
  boolean selfOnly = false;
};

[Exposed=Window]
interface DOMImplementation {
  [NewObject] DocumentType createDocumentType(DOMString name, DOMString publicId, DOMString systemId);
  [NewObject] XMLDocument createDocument(DOMString? namespace, [LegacyNullToEmptyString] DOMString qualifiedName, optional DocumentType? doctype = null);
  [NewObject] Document createHTMLDocument(optional DOMString title);

  boolean hasFeature(); // useless; always returns true
};

[Exposed=Window]
interface DocumentType : Node {
  readonly attribute DOMString name;
  readonly attribute DOMString publicId;
  readonly attribute DOMString systemId;
};

[Exposed=Window]
interface DocumentFragment : Node {
  constructor();
};

[Exposed=Window]
interface ShadowRoot : DocumentFragment {
  readonly attribute ShadowRootMode mode;
  readonly attribute boolean delegatesFocus;
  readonly attribute SlotAssignmentMode slotAssignment;
  readonly attribute boolean clonable;
  readonly attribute boolean serializable;
  readonly attribute Element host;

  attribute EventHandler onslotchange;
};

enum ShadowRootMode { "open", "closed" };
enum SlotAssignmentMode { "manual", "named" };

[Exposed=Window]
interface Element : Node {
  readonly attribute DOMString? namespaceURI;
  readonly attribute DOMString? prefix;
  readonly attribute DOMString localName;
  readonly attribute DOMString tagName;

  [CEReactions] attribute DOMString id;
  [CEReactions] attribute DOMString className;
  [SameObject, PutForwards=value] readonly attribute DOMTokenList classList;
  [CEReactions, Unscopable] attribute DOMString slot;

  boolean hasAttributes();
  [SameObject] readonly attribute NamedNodeMap attributes;
  sequence<DOMString> getAttributeNames();
  DOMString? getAttribute(DOMString qualifiedName);
  DOMString? getAttributeNS(DOMString? namespace, DOMString localName);
  [CEReactions] undefined setAttribute(DOMString qualifiedName, DOMString value);
  [CEReactions] undefined setAttributeNS(DOMString? namespace, DOMString qualifiedName, DOMString value);
  [CEReactions] undefined removeAttribute(DOMString qualifiedName);
  [CEReactions] undefined removeAttributeNS(DOMString? namespace, DOMString localName);
  [CEReactions] boolean toggleAttribute(DOMString qualifiedName, optional boolean force);
  boolean hasAttribute(DOMString qualifiedName);
  boolean hasAttributeNS(DOMString? namespace, DOMString localName);

  Attr? getAttributeNode(DOMString qualifiedName);
  Attr? getAttributeNodeNS(DOMString? namespace, DOMString localName);
  [CEReactions] Attr? setAttributeNode(Attr attr);
  [CEReactions] Attr? setAttributeNodeNS(Attr attr);
  [CEReactions] Attr removeAttributeNode(Attr attr);

  ShadowRoot attachShadow(ShadowRootInit init);
  readonly attribute ShadowRoot? shadowRoot;

  readonly attribute CustomElementRegistry? customElementRegistry;

  Element? closest(DOMString selectors);
  boolean matches(DOMString selectors);
  boolean webkitMatchesSelector(DOMString selectors); // legacy alias of .matches

  HTMLCollection getElementsByTagName(DOMString qualifiedName);
  HTMLCollection getElementsByTagNameNS(DOMString? namespace, DOMString localName);
  HTMLCollection getElementsByClassName(DOMString classNames);

  [CEReactions] Element? insertAdjacentElement(DOMString where, Element element); // legacy
  undefined insertAdjacentText(DOMString where, DOMString data); // legacy
};

dictionary ShadowRootInit {
  required ShadowRootMode mode;
  boolean delegatesFocus = false;
  SlotAssignmentMode slotAssignment = "named";
  boolean clonable = false;
  boolean serializable = false;
  CustomElementRegistry? customElementRegistry = null;
};

[Exposed=Window,
 LegacyUnenumerableNamedProperties]
interface NamedNodeMap {
  readonly attribute unsigned long length;
  getter Attr? item(unsigned long index);
  getter Attr? getNamedItem(DOMString qualifiedName);
  Attr? getNamedItemNS(DOMString? namespace, DOMString localName);
  [CEReactions] Attr? setNamedItem(Attr attr);
  [CEReactions] Attr? setNamedItemNS(Attr attr);
  [CEReactions] Attr removeNamedItem(DOMString qualifiedName);
  [CEReactions] Attr removeNamedItemNS(DOMString? namespace, DOMString localName);
};

[Exposed=Window]
interface Attr : Node {
  readonly attribute DOMString? namespaceURI;
  readonly attribute DOMString? prefix;
  readonly attribute DOMString localName;
  readonly attribute DOMString name;
  [CEReactions] attribute DOMString value;

  readonly attribute Element? ownerElement;

  readonly attribute boolean specified; // useless; always returns true
};
[Exposed=Window]
interface CharacterData : Node {
  attribute [LegacyNullToEmptyString] DOMString data;
  readonly attribute unsigned long length;
  DOMString substringData(unsigned long offset, unsigned long count);
  undefined appendData(DOMString data);
  undefined insertData(unsigned long offset, DOMString data);
  undefined deleteData(unsigned long offset, unsigned long count);
  undefined replaceData(unsigned long offset, unsigned long count, DOMString data);
};

[Exposed=Window]
interface Text : CharacterData {
  constructor(optional DOMString data = "");

  [NewObject] Text splitText(unsigned long offset);
  readonly attribute DOMString wholeText;
};

[Exposed=Window]
interface CDATASection : Text {
};
[Exposed=Window]
interface ProcessingInstruction : CharacterData {
  readonly attribute DOMString target;
};
[Exposed=Window]
interface Comment : CharacterData {
  constructor(optional DOMString data = "");
};

[Exposed=Window]
interface AbstractRange {
  readonly attribute Node startContainer;
  readonly attribute unsigned long startOffset;
  readonly attribute Node endContainer;
  readonly attribute unsigned long endOffset;
  readonly attribute boolean collapsed;
};

dictionary StaticRangeInit {
  required Node startContainer;
  required unsigned long startOffset;
  required Node endContainer;
  required unsigned long endOffset;
};

[Exposed=Window]
interface StaticRange : AbstractRange {
  constructor(StaticRangeInit init);
};

[Exposed=Window]
interface Range : AbstractRange {
  constructor();

  readonly attribute Node commonAncestorContainer;

  undefined setStart(Node node, unsigned long offset);
  undefined setEnd(Node node, unsigned long offset);
  undefined setStartBefore(Node node);
  undefined setStartAfter(Node node);
  undefined setEndBefore(Node node);
  undefined setEndAfter(Node node);
  undefined collapse(optional boolean toStart = false);
  undefined selectNode(Node node);
  undefined selectNodeContents(Node node);

  const unsigned short START_TO_START = 0;
  const unsigned short START_TO_END = 1;
  const unsigned short END_TO_END = 2;
  const unsigned short END_TO_START = 3;
  short compareBoundaryPoints(unsigned short how, Range sourceRange);

  [CEReactions] undefined deleteContents();
  [CEReactions, NewObject] DocumentFragment extractContents();
  [CEReactions, NewObject] DocumentFragment cloneContents();
  [CEReactions] undefined insertNode(Node node);
  [CEReactions] undefined surroundContents(Node newParent);

  [NewObject] Range cloneRange();
  undefined detach();

  boolean isPointInRange(Node node, unsigned long offset);
  short comparePoint(Node node, unsigned long offset);

  boolean intersectsNode(Node node);

  stringifier;
};

[Exposed=Window]
interface NodeIterator {
  [SameObject] readonly attribute Node root;
  readonly attribute Node referenceNode;
  readonly attribute boolean pointerBeforeReferenceNode;
  readonly attribute unsigned long whatToShow;
  readonly attribute NodeFilter? filter;

  Node? nextNode();
  Node? previousNode();

  undefined detach();
};

[Exposed=Window]
interface TreeWalker {
  [SameObject] readonly attribute Node root;
  readonly attribute unsigned long whatToShow;
  readonly attribute NodeFilter? filter;
           attribute Node currentNode;

  Node? parentNode();
  Node? firstChild();
  Node? lastChild();
  Node? previousSibling();
  Node? nextSibling();
  Node? previousNode();
  Node? nextNode();
};
[Exposed=Window]
callback interface NodeFilter {
  // Constants for acceptNode()
  const unsigned short FILTER_ACCEPT = 1;
  const unsigned short FILTER_REJECT = 2;
  const unsigned short FILTER_SKIP = 3;

  // Constants for whatToShow
  const unsigned long SHOW_ALL = 0xFFFFFFFF;
  const unsigned long SHOW_ELEMENT = 0x1;
  const unsigned long SHOW_ATTRIBUTE = 0x2;
  const unsigned long SHOW_TEXT = 0x4;
  const unsigned long SHOW_CDATA_SECTION = 0x8;
  const unsigned long SHOW_ENTITY_REFERENCE = 0x10; // legacy
  const unsigned long SHOW_ENTITY = 0x20; // legacy
  const unsigned long SHOW_PROCESSING_INSTRUCTION = 0x40;
  const unsigned long SHOW_COMMENT = 0x80;
  const unsigned long SHOW_DOCUMENT = 0x100;
  const unsigned long SHOW_DOCUMENT_TYPE = 0x200;
  const unsigned long SHOW_DOCUMENT_FRAGMENT = 0x400;
  const unsigned long SHOW_NOTATION = 0x800; // legacy

  unsigned short acceptNode(Node node);
};

[Exposed=Window]
interface DOMTokenList {
  readonly attribute unsigned long length;
  getter DOMString? item(unsigned long index);
  boolean contains(DOMString token);
  [CEReactions] undefined add(DOMString... tokens);
  [CEReactions] undefined remove(DOMString... tokens);
  [CEReactions] boolean toggle(DOMString token, optional boolean force);
  [CEReactions] boolean replace(DOMString token, DOMString newToken);
  boolean supports(DOMString token);
  [CEReactions] stringifier attribute DOMString value;
  iterable<DOMString>;
};

[Exposed=Window]
interface XPathResult {
  const unsigned short ANY_TYPE = 0;
  const unsigned short NUMBER_TYPE = 1;
  const unsigned short STRING_TYPE = 2;
  const unsigned short BOOLEAN_TYPE = 3;
  const unsigned short UNORDERED_NODE_ITERATOR_TYPE = 4;
  const unsigned short ORDERED_NODE_ITERATOR_TYPE = 5;
  const unsigned short UNORDERED_NODE_SNAPSHOT_TYPE = 6;
  const unsigned short ORDERED_NODE_SNAPSHOT_TYPE = 7;
  const unsigned short ANY_UNORDERED_NODE_TYPE = 8;
  const unsigned short FIRST_ORDERED_NODE_TYPE = 9;

  readonly attribute unsigned short resultType;
  readonly attribute unrestricted double numberValue;
  readonly attribute DOMString stringValue;
  readonly attribute boolean booleanValue;
  readonly attribute Node? singleNodeValue;
  readonly attribute boolean invalidIteratorState;
  readonly attribute unsigned long snapshotLength;

  Node? iterateNext();
  Node? snapshotItem(unsigned long index);
};

[Exposed=Window]
interface XPathExpression {
  // XPathResult.ANY_TYPE = 0
  XPathResult evaluate(Node contextNode, optional unsigned short type = 0, optional XPathResult? result = null);
};

callback interface XPathNSResolver {
  DOMString? lookupNamespaceURI(DOMString? prefix);
};

interface mixin XPathEvaluatorBase {
  [NewObject] XPathExpression createExpression(DOMString expression, optional XPathNSResolver? resolver = null);
  Node createNSResolver(Node nodeResolver); // legacy
  // XPathResult.ANY_TYPE = 0
  XPathResult evaluate(DOMString expression, Node contextNode, optional XPathNSResolver? resolver = null, optional unsigned short type = 0, optional XPathResult? result = null);
};
Document includes XPathEvaluatorBase;

[Exposed=Window]
interface XPathEvaluator {
  constructor();
};

XPathEvaluator includes XPathEvaluatorBase;

[Exposed=Window]
interface XSLTProcessor {
  constructor();
  undefined importStylesheet(Node style);
  [CEReactions] DocumentFragment transformToFragment(Node source, Document output);
  [CEReactions] Document transformToDocument(Node source);
  undefined setParameter([LegacyNullToEmptyString] DOMString namespaceURI, DOMString localName, any value);
  any getParameter([LegacyNullToEmptyString] DOMString namespaceURI, DOMString localName);
  undefined removeParameter([LegacyNullToEmptyString] DOMString namespaceURI, DOMString localName);
  undefined clearParameters();
  undefined reset();
};

MDN

AbortController/AbortController

In all current engines.

Firefox57+Safari12.1+Chrome66+
Opera?Edge79+
Edge (Legacy)16+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Node.js15.0.0+

AbortController/abort

In all current engines.

Firefox57+Safari12.1+Chrome66+
Opera?Edge79+
Edge (Legacy)16+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Node.js15.0.0+
MDN

AbortController/signal

In all current engines.

Firefox57+Safari12.1+Chrome66+
Opera?Edge79+
Edge (Legacy)16+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Node.js15.0.0+
MDN

AbortController

In all current engines.

Firefox57+Safari12.1+Chrome66+
Opera?Edge79+
Edge (Legacy)16+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Node.js15.0.0+
MDN

AbortSignal/abort_event

In all current engines.

Firefox57+Safari11.1+Chrome66+
Opera?Edge79+
Edge (Legacy)16+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Node.js15.0.0+
MDN

AbortSignal/abort_event

In all current engines.

Firefox57+Safari11.1+Chrome66+
Opera?Edge79+
Edge (Legacy)16+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Node.js15.0.0+
MDN

AbortSignal/abort_static

In all current engines.

Firefox88+Safari15+Chrome93+
Opera?Edge93+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Node.js15.12.0+
MDN

AbortSignal/aborted

In all current engines.

Firefox57+Safari11.1+Chrome66+
Opera?Edge79+
Edge (Legacy)16+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Node.js15.0.0+
MDN

AbortSignal/reason

In all current engines.

Firefox97+Safari15.4+Chrome98+
Opera?Edge98+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Node.js17.2.0+
MDN

AbortSignal/throwIfAborted

In all current engines.

Firefox97+Safari15.4+Chrome100+
Opera?Edge100+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Node.js17.3.0+
MDN

AbortSignal/timeout_static

In all current engines.

Firefox100+Safari16+Chrome103+
Opera?Edge103+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Node.js17.3.0+
MDN

AbortSignal

In all current engines.

Firefox57+Safari11.1+Chrome66+
Opera?Edge79+
Edge (Legacy)16+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Node.js15.0.0+
MDN

AbstractRange/collapsed

In all current engines.

Firefox69+Safari14.1+Chrome90+
Opera?Edge90+
Edge (Legacy)NoneIENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?

Range/collapsed

In all current engines.

Firefox1+Safari1+Chrome1+
Opera9+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+

StaticRange/collapsed

In all current engines.

Firefox69+Safari10.1+Chrome60+
Opera?Edge79+
Edge (Legacy)18IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

AbstractRange/endContainer

In all current engines.

Firefox69+Safari14.1+Chrome90+
Opera?Edge90+
Edge (Legacy)NoneIENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?

Range/endContainer

In all current engines.

Firefox1+Safari1+Chrome1+
Opera9+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+

StaticRange/endContainer

In all current engines.

Firefox69+Safari10.1+Chrome60+
Opera?Edge79+
Edge (Legacy)18IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

AbstractRange/endOffset

In all current engines.

Firefox69+Safari14.1+Chrome90+
Opera?Edge90+
Edge (Legacy)NoneIENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?

Range/endOffset

In all current engines.

Firefox1+Safari1+Chrome1+
Opera9+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+

StaticRange/endOffset

In all current engines.

Firefox69+Safari10.1+Chrome60+
Opera?Edge79+
Edge (Legacy)18IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

AbstractRange/startContainer

In all current engines.

Firefox69+Safari14.1+Chrome90+
Opera?Edge90+
Edge (Legacy)NoneIENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?

Range/startContainer

In all current engines.

Firefox1+Safari1+Chrome1+
Opera9+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+

StaticRange/startContainer

In all current engines.

Firefox69+Safari10.1+Chrome60+
Opera?Edge79+
Edge (Legacy)18IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

AbstractRange/startOffset

In all current engines.

Firefox69+Safari14.1+Chrome90+
Opera?Edge90+
Edge (Legacy)NoneIENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?

Range/startOffset

In all current engines.

Firefox1+Safari1+Chrome1+
Opera9+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+

StaticRange/startOffset

In all current engines.

Firefox69+Safari10.1+Chrome60+
Opera?Edge79+
Edge (Legacy)18IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

AbstractRange

In all current engines.

Firefox69+Safari14.1+Chrome90+
Opera?Edge90+
Edge (Legacy)NoneIENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

Attr/localName

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Attr/name

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE6+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Attr/namespaceURI

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Attr/ownerElement

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE8+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Attr/prefix

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Attr/value

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE6+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Attr

In all current engines.

Firefox1+Safari1+Chrome1+
Opera8+Edge79+
Edge (Legacy)12+IE5.5+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

CDATASection

In all current engines.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari1+Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile12.1+
MDN

CharacterData/after

In all current engines.

Firefox49+Safari10+Chrome54+
Opera39+Edge79+
Edge (Legacy)17+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?

DocumentType/after

In all current engines.

Firefox49+Safari10+Chrome54+
Opera39+Edge79+
Edge (Legacy)17+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?

Element/after

In all current engines.

Firefox49+Safari10+Chrome54+
Opera39+Edge79+
Edge (Legacy)17+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

CharacterData/appendData

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE6+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

CharacterData/before

In all current engines.

Firefox49+Safari10+Chrome54+
Opera39+Edge79+
Edge (Legacy)17+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?

DocumentType/before

In all current engines.

Firefox49+Safari10+Chrome54+
Opera39+Edge79+
Edge (Legacy)17+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?

Element/before

In all current engines.

Firefox49+Safari10+Chrome54+
Opera39+Edge79+
Edge (Legacy)17+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

CharacterData/data

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE5+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

CharacterData/deleteData

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE6+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

CharacterData/insertData

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE6+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

CharacterData/length

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE5+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

CharacterData/nextElementSibling

In all current engines.

Firefox25+Safari9+Chrome29+
Opera?Edge79+
Edge (Legacy)17+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?

Element/nextElementSibling

In all current engines.

Firefox3.5+Safari4+Chrome2+
Opera10+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari3+Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile10.1+
MDN

CharacterData/previousElementSibling

In all current engines.

Firefox25+Safari9+Chrome29+
Opera?Edge79+
Edge (Legacy)17+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?

Element/previousElementSibling

In all current engines.

Firefox3.5+Safari4+Chrome2+
Opera10+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari3+Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile10.1+
MDN

CharacterData/remove

In all current engines.

Firefox23+Safari7+Chrome24+
Opera?Edge79+
Edge (Legacy)12+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?

DocumentType/remove

In all current engines.

Firefox23+Safari7+Chrome24+
Opera?Edge79+
Edge (Legacy)12+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?

Element/remove

In all current engines.

Firefox23+Safari7+Chrome24+
Opera?Edge79+
Edge (Legacy)12+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

CharacterData/replaceData

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE6+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

CharacterData/replaceWith

In all current engines.

Firefox49+Safari10+Chrome54+
Opera39+Edge79+
Edge (Legacy)17+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?

DocumentType/replaceWith

In all current engines.

Firefox49+Safari10+Chrome54+
Opera39+Edge79+
Edge (Legacy)17+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?

Element/replaceWith

In all current engines.

Firefox49+Safari10+Chrome54+
Opera39+Edge79+
Edge (Legacy)17+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

CharacterData/substringData

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE6+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

CharacterData

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE5+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Comment/Comment

In all current engines.

Firefox24+Safari8+Chrome29+
Opera?Edge79+
Edge (Legacy)16+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

Comment

In all current engines.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari1+Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

CustomEvent/CustomEvent

In all current engines.

Firefox11+Safari6+Chrome15+
Opera11.6+Edge79+
Edge (Legacy)12+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12+
MDN

CustomEvent/detail

In all current engines.

Firefox6+Safari5+Chrome5+
Opera11.6+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari5+Chrome for Android?Android WebView3+Samsung Internet?Opera Mobile12+
MDN

CustomEvent

In all current engines.

Firefox6+Safari5+Chrome5+
Opera11+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari5+Chrome for Android?Android WebView3+Samsung Internet?Opera Mobile11+
Node.js19.0.0+
MDN

DOMImplementation/createDocument

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

DOMImplementation/createDocumentType

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

DOMImplementation/createHTMLDocument

In all current engines.

Firefox4+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

DOMImplementation

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE6+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

DOMTokenList/add

In all current engines.

Firefox3.6+Safari5.1+Chrome8+
Opera12.1+Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView3+Samsung Internet?Opera Mobile12.1+
MDN

DOMTokenList/contains

In all current engines.

Firefox3.6+Safari5.1+Chrome8+
Opera12.1+Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView3+Samsung Internet?Opera Mobile12.1+
MDN

DOMTokenList/item

In all current engines.

Firefox3.6+Safari5.1+Chrome8+
Opera12.1+Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView3+Samsung Internet?Opera Mobile12.1+
MDN

DOMTokenList/length

In all current engines.

Firefox3.6+Safari5.1+Chrome8+
Opera12.1+Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView3+Samsung Internet?Opera Mobile12.1+
MDN

DOMTokenList/remove

In all current engines.

Firefox3.6+Safari5.1+Chrome8+
Opera12.1+Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView3+Samsung Internet?Opera Mobile12.1+
MDN

DOMTokenList/replace

In all current engines.

Firefox49+Safari10.1+Chrome61+
Opera?Edge79+
Edge (Legacy)17+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

DOMTokenList/supports

In all current engines.

Firefox49+Safari10.1+Chrome49+
Opera?Edge79+
Edge (Legacy)17+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

DOMTokenList/toggle

In all current engines.

Firefox3.6+Safari5.1+Chrome8+
Opera12.1+Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView3+Samsung Internet?Opera Mobile12.1+
MDN

DOMTokenList/value

In all current engines.

Firefox47+Safari10+Chrome50+
Opera?Edge79+
Edge (Legacy)17+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

DOMTokenList

In all current engines.

Firefox3.6+Safari5.1+Chrome8+
Opera11.5+Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView3+Samsung Internet?Opera Mobile11.5+
MDN

Document/Document

In all current engines.

Firefox20+Safari8+Chrome60+
Opera?Edge79+
Edge (Legacy)17+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

Document/URL

In all current engines.

Firefox1+Safari1+Chrome1+
Opera3+Edge79+
Edge (Legacy)12+IE4+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

Document/adoptNode

In all current engines.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari1+Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Document/append

In all current engines.

Firefox49+Safari10+Chrome54+
Opera?Edge79+
Edge (Legacy)17+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?

DocumentFragment/append

In all current engines.

Firefox49+Safari10+Chrome54+
Opera?Edge79+
Edge (Legacy)17+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?

Element/append

In all current engines.

Firefox49+Safari10+Chrome54+
Opera?Edge79+
Edge (Legacy)17+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

Document/characterSet

In all current engines.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari1+Chrome for Android?Android WebView1+Samsung Internet?Opera Mobile12.1+
MDN

Document/childElementCount

In all current engines.

Firefox25+Safari9+Chrome29+
Opera?Edge79+
Edge (Legacy)17+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?

DocumentFragment/childElementCount

In all current engines.

Firefox25+Safari9+Chrome29+
Opera?Edge79+
Edge (Legacy)17+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?

Element/childElementCount

In all current engines.

Firefox3.5+Safari4+Chrome2+
Opera10+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari3+Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile10.1+
MDN

Document/children

In all current engines.

Firefox25+Safari9+Chrome29+
Opera?Edge79+
Edge (Legacy)16+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?

DocumentFragment/children

In all current engines.

Firefox25+Safari9+Chrome29+
Opera?Edge79+
Edge (Legacy)16+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?

Element/children

In all current engines.

Firefox3.5+Safari4+Chrome1+
Opera10+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari3+Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

Document/compatMode

In all current engines.

Firefox1+Safari3.1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE6+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Document/contentType

In all current engines.

Firefox1+Safari9+Chrome36+
Opera23+Edge79+
Edge (Legacy)17+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile24+
MDN

Document/createAttribute

In all current engines.

Firefox44+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE6+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Document/createAttributeNS

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Document/createCDATASection

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+

Document/createComment

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE6+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Document/createDocumentFragment

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE6+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Document/createElement

In all current engines.

Firefox1+Safari1+Chrome1+
Opera6+Edge79+
Edge (Legacy)12+IE5+
Firefox for Android4+iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

Document/createElementNS

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android4+iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Document/createEvent

In all current engines.

Firefox1+Safari1+Chrome1+
Opera7+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android4+iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

Document/createExpression

In all current engines.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IENone
Firefox for Android?iOS Safari1+Chrome for Android?Android WebView3+Samsung Internet?Opera Mobile12.1+

XPathEvaluator/createExpression

In all current engines.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IENone
Firefox for Android?iOS Safari1+Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Document/createNodeIterator

In all current engines.

Firefox1+Safari3+Chrome1+
Opera9+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari1+Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

Document/createNSResolver

In all current engines.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IENone
Firefox for Android?iOS Safari1+Chrome for Android?Android WebView3+Samsung Internet?Opera Mobile12.1+

XPathEvaluator/createNSResolver

In all current engines.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IENone
Firefox for Android?iOS Safari1+Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Document/createProcessingInstruction

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Document/createRange

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Document/createTextNode

In all current engines.

Firefox1+Safari1+Chrome1+
Opera7+Edge79+
Edge (Legacy)12+IE5+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

Document/createTreeWalker

In all current engines.

Firefox1+Safari3+Chrome1+
Opera9+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari3+Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

Document/doctype

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE6+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Document/documentElement

In all current engines.

Firefox1+Safari1+Chrome1+
Opera7+Edge79+
Edge (Legacy)12+IE5+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

Document/documentURI

In all current engines.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)17+IENone
Firefox for Android?iOS Safari1+Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Document/evaluate

In all current engines.

Firefox1+Safari3+Chrome1+
Opera9+Edge79+
Edge (Legacy)12+IENone
Firefox for Android?iOS Safari1+Chrome for Android?Android WebView3+Samsung Internet?Opera Mobile10.1+

XPathEvaluator/evaluate

In all current engines.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IENone
Firefox for Android?iOS Safari1+Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Document/firstElementChild

In all current engines.

Firefox25+Safari9+Chrome29+
Opera?Edge79+
Edge (Legacy)17+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?

DocumentFragment/firstElementChild

In all current engines.

Firefox25+Safari9+Chrome29+
Opera?Edge79+
Edge (Legacy)17+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?

Element/firstElementChild

In all current engines.

Firefox3.5+Safari4+Chrome2+
Opera10+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari3+Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile10.1+
MDN

Document/getElementById

In all current engines.

Firefox1+Safari1+Chrome1+
Opera7+Edge79+
Edge (Legacy)12+IE5.5+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

Document/getElementsByClassName

In all current engines.

Firefox3+Safari3.1+Chrome1+
Opera9.5+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

Document/getElementsByTagName

In all current engines.

Firefox1+Safari1+Chrome1+
Opera5.1+Edge79+
Edge (Legacy)12+IE5+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

Document/getElementsByTagNameNS

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Document/implementation

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE6+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Document/importNode

In all current engines.

Firefox1+Safari1+Chrome1+
Opera9+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

Document/lastElementChild

In all current engines.

Firefox25+Safari9+Chrome29+
Opera?Edge79+
Edge (Legacy)17+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?

DocumentFragment/lastElementChild

In all current engines.

Firefox25+Safari9+Chrome29+
Opera?Edge79+
Edge (Legacy)17+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?

Element/lastElementChild

In all current engines.

Firefox3.5+Safari4+Chrome2+
Opera10+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari3+Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile10.1+
MDN

Document/prepend

In all current engines.

Firefox49+Safari10+Chrome54+
Opera?Edge79+
Edge (Legacy)17+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?

DocumentFragment/prepend

In all current engines.

Firefox49+Safari10+Chrome54+
Opera?Edge79+
Edge (Legacy)17+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?

Element/prepend

In all current engines.

Firefox49+Safari10+Chrome54+
Opera?Edge79+
Edge (Legacy)17+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

Document/querySelector

In all current engines.

Firefox3.5+Safari3.1+Chrome1+
Opera10+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+

DocumentFragment/querySelector

In all current engines.

Firefox3.5+Safari4+Chrome2+
Opera10+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari3+Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile10.1+
MDN

Document/querySelectorAll

In all current engines.

Firefox3.5+Safari3.1+Chrome1+
Opera10+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+

DocumentFragment/querySelectorAll

In all current engines.

Firefox3.5+Safari4+Chrome2+
Opera10+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari3+Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile10.1+

Element/querySelector

In all current engines.

Firefox3.5+Safari3.1+Chrome1+
Opera10+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+

Element/querySelectorAll

In all current engines.

Firefox3.5+Safari3.1+Chrome1+
Opera10+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

Document/replaceChildren

In all current engines.

Firefox78+Safari14+Chrome86+
Opera?Edge86+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?

DocumentFragment/replaceChildren

In all current engines.

Firefox78+Safari14+Chrome86+
Opera?Edge86+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?

Element/replaceChildren

In all current engines.

Firefox78+Safari14+Chrome86+
Opera?Edge86+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

Document

In all current engines.

Firefox1+Safari1+Chrome1+
Opera3+Edge79+
Edge (Legacy)12+IE4+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile10.1+
MDN

DocumentFragment/DocumentFragment

In all current engines.

Firefox24+Safari8+Chrome29+
Opera?Edge79+
Edge (Legacy)17+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

DocumentFragment/getElementById

In all current engines.

Firefox28+Safari9+Chrome36+
Opera?Edge79+
Edge (Legacy)17+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

DocumentFragment

In all current engines.

Firefox1+Safari3+Chrome1+
Opera8+Edge79+
Edge (Legacy)12+IE6+
Firefox for Android?iOS Safari1+Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

DocumentType/name

In all current engines.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari1+Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

DocumentType/publicId

In all current engines.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari1+Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

DocumentType/systemId

In all current engines.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari1+Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

DocumentType

In all current engines.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari1+Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile12.1+
MDN

Element/assignedSlot

In all current engines.

Firefox63+Safari10+Chrome53+
Opera?Edge79+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?

Text/assignedSlot

In all current engines.

Firefox63+Safari10+Chrome53+
Opera?Edge79+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

Element/attachShadow

In all current engines.

Firefox63+Safari10+Chrome53+
Opera?Edge79+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

Element/attributes

In all current engines.

Firefox1+Safari1+Chrome1+
Opera8+Edge79+
Edge (Legacy)12+IE5.5+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

Element/classList

In all current engines.

Firefox3.6+Safari7+Chrome22+
Opera11.5+Edge79+
Edge (Legacy)16+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView4.4+Samsung Internet?Opera Mobile11.5+
MDN

Element/className

In all current engines.

Firefox1+Safari1+Chrome22+
Opera8+Edge79+
Edge (Legacy)12+IE5+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

Element/closest

In all current engines.

Firefox35+Safari6+Chrome41+
Opera?Edge79+
Edge (Legacy)15+IENone
Firefox for Android?iOS Safari9+Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

Element/getAttribute

In all current engines.

Firefox1+Safari1+Chrome1+
Opera8+Edge79+
Edge (Legacy)12+IE5+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

Element/getAttributeNames

In all current engines.

Firefox45+Safari10.1+Chrome61+
Opera?Edge79+
Edge (Legacy)18IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

Element/getAttributeNode

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE6+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Element/getAttributeNodeNS

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Element/getAttributeNS

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Element/getElementsByClassName

In all current engines.

Firefox3+Safari3.1+Chrome1+
Opera9.5+Edge79+
Edge (Legacy)16+IENone
Firefox for Android4+iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

Element/getElementsByTagName

In all current engines.

Firefox1+Safari1+Chrome1+
Opera8+Edge79+
Edge (Legacy)12+IE5.5+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

Element/getElementsByTagNameNS

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android4+iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Element/hasAttribute

In all current engines.

Firefox1+Safari1+Chrome1+
Opera8+Edge79+
Edge (Legacy)12+IE8+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

Element/hasAttributeNS

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Element/hasAttributes

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE8+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Element/id

In all current engines.

Firefox1+Safari1+Chrome23+
Opera12.1+Edge79+
Edge (Legacy)12+IE5+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Element/insertAdjacentElement

In all current engines.

Firefox48+Safari3+Chrome1+
Opera8+Edge79+
Edge (Legacy)17+IENone
Firefox for Android?iOS Safari1+Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

Element/insertAdjacentText

In all current engines.

Firefox48+Safari4+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)17+IENone
Firefox for Android?iOS Safari4+Chrome for Android?Android WebView2.2+Samsung Internet?Opera Mobile12.1+
MDN

Element/localName

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Element/matches

In all current engines.

Firefox34+Safari8+Chrome33+
Opera21+Edge79+
Edge (Legacy)15+IENone
Firefox for Android34+iOS Safari?Chrome for Android?Android WebView4.4+Samsung Internet?Opera Mobile21+
MDN

Element/namespaceURI

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Element/prefix

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Element/removeAttribute

In all current engines.

Firefox1+Safari1+Chrome1+
Opera8+Edge79+
Edge (Legacy)12+IE5+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

Element/removeAttributeNode

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE6+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Element/removeAttributeNS

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Element/setAttribute

In all current engines.

Firefox1+Safari1+Chrome1+
Opera8+Edge79+
Edge (Legacy)12+IE5+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

Element/setAttributeNode

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE6+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Element/setAttributeNodeNS

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Element/setAttributeNS

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Element/shadowRoot

In all current engines.

Firefox63+Safari10+Chrome35+
Opera?Edge79+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

Element/slot

In all current engines.

Firefox63+Safari10+Chrome53+
Opera?Edge79+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?

Global_attributes/slot

In all current engines.

Firefox63+Safari10+Chrome53+
Opera?Edge79+
Edge (Legacy)NoneIE?
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

Element/tagName

In all current engines.

Firefox1+Safari1+Chrome1+
Opera8+Edge79+
Edge (Legacy)12+IE5+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

Element/toggleAttribute

In all current engines.

Firefox63+Safari12+Chrome69+
Opera?Edge79+
Edge (Legacy)18IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

Element

In all current engines.

Firefox1+Safari1+Chrome1+
Opera8+Edge79+
Edge (Legacy)12+IE4+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile10.1+
MDN

Event/Event

In all current engines.

Firefox11+Safari6+Chrome15+
Opera11.6+Edge79+
Edge (Legacy)12+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12+
Node.js15.0.0+
MDN

Event/bubbles

In all current engines.

Firefox1.5+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile12.1+
Node.js14.5.0+
MDN

Event/cancelable

In all current engines.

Firefox1.5+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile12.1+
Node.js14.5.0+
MDN

Event/composed

In all current engines.

Firefox52+Safari10+Chrome53+
Opera?Edge79+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Node.js14.5.0+
MDN

Event/composedPath

In all current engines.

Firefox59+Safari10+Chrome53+
Opera?Edge79+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Node.js14.5.0+
MDN

Event/currentTarget

In all current engines.

Firefox1+Safari1+Chrome1+
Opera7+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
Node.js14.5.0+
MDN

Event/defaultPrevented

In all current engines.

Firefox6+Safari5+Chrome5+
Opera11+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari5+Chrome for Android?Android WebView3+Samsung Internet?Opera Mobile11+
Node.js14.5.0+
MDN

Event/eventPhase

In all current engines.

Firefox1.5+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
Node.js14.5.0+
MDN

Event/isTrusted

In all current engines.

Firefox1.5+Safari10+Chrome46+
Opera33+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView46+Samsung Internet?Opera Mobile33+
Node.js14.5.0+
MDN

Event/preventDefault

In all current engines.

Firefox1+Safari1+Chrome1+
Opera7+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
Node.js14.5.0+
MDN

Event/stopImmediatePropagation

In all current engines.

Firefox10+Safari5+Chrome5+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari5+Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile12.1+
Node.js14.5.0+
MDN

Event/stopPropagation

In all current engines.

Firefox1+Safari1+Chrome1+
Opera7+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
Node.js14.5.0+
MDN

Event/target

In all current engines.

Firefox1+Safari1+Chrome1+
Opera7+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
Node.js14.5.0+
MDN

Event/timeStamp

In all current engines.

Firefox1.5+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView1+Samsung Internet?Opera Mobile12.1+
Node.js14.5.0+
MDN

Event/type

In all current engines.

Firefox1.5+Safari1+Chrome1+
Opera7+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
Node.js14.5.0+
MDN

Event

In all current engines.

Firefox1+Safari1+Chrome1+
Opera4+Edge79+
Edge (Legacy)12+IE6+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile10.1+
Node.js14.5.0+
MDN

EventTarget/EventTarget

In all current engines.

Firefox59+Safari14+Chrome64+
Opera?Edge79+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
Node.js15.0.0+
MDN

EventTarget/addEventListener

In all current engines.

Firefox1+Safari1+Chrome1+
Opera7+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView1+Samsung Internet?Opera Mobile10.1+
Node.js14.5.0+
MDN

EventTarget/dispatchEvent

In all current engines.

Firefox2+Safari3.1+Chrome4+
Opera9+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari3+Chrome for Android?Android WebView4+Samsung Internet?Opera Mobile10.1+
Node.js14.5.0+
MDN

EventTarget/removeEventListener

In all current engines.

Firefox1+Safari1+Chrome1+
Opera7+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
Node.js14.5.0+
MDN

EventTarget

In all current engines.

Firefox1+Safari1+Chrome1+
Opera7+Edge79+
Edge (Legacy)12+IE6+
Firefox for Android?iOS Safari1+Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile10.1+
Node.js14.5.0+
MDN

HTMLCollection/item

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE8+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

HTMLCollection/length

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE8+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

HTMLCollection/namedItem

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE8+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

HTMLCollection

In all current engines.

Firefox1+Safari1+Chrome1+
Opera8+Edge79+
Edge (Legacy)12+IE8+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

HTMLSlotElement/slotchange_event

In all current engines.

Firefox63+Safari10.1+Chrome53+
Opera?Edge79+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

MutationObserver/MutationObserver

In all current engines.

Firefox14+Safari7+Chrome26+
Opera15+Edge79+
Edge (Legacy)12+IE11
Firefox for Android?iOS Safari?Chrome for Android?Android WebView4.4+Samsung Internet?Opera Mobile14+
MDN

MutationObserver/disconnect

In all current engines.

Firefox14+Safari6+Chrome18+
Opera?Edge79+
Edge (Legacy)12+IE11
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

MutationObserver/observe

In all current engines.

Firefox14+Safari6+Chrome18+
Opera?Edge79+
Edge (Legacy)12+IE11
Firefox for Android?iOS Safari6+Chrome for Android?Android WebView4.4+Samsung Internet?Opera Mobile?
MDN

MutationObserver/takeRecords

In all current engines.

Firefox14+Safari6+Chrome20+
Opera?Edge79+
Edge (Legacy)12+IE11
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

MutationObserver

In all current engines.

Firefox14+Safari7+Chrome26+
Opera15+Edge79+
Edge (Legacy)12+IE11
Firefox for Android?iOS Safari?Chrome for Android?Android WebView4.4+Samsung Internet?Opera Mobile14+
MDN

MutationRecord/addedNodes

In all current engines.

Firefox14+Safari7+Chrome16+
Opera?Edge79+
Edge (Legacy)12+IE11
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

MutationRecord/attributeName

In all current engines.

Firefox14+Safari7+Chrome16+
Opera?Edge79+
Edge (Legacy)12+IE11
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

MutationRecord/attributeNamespace

In all current engines.

Firefox14+Safari7+Chrome16+
Opera?Edge79+
Edge (Legacy)12+IE11
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

MutationRecord/nextSibling

In all current engines.

Firefox14+Safari7+Chrome16+
Opera?Edge79+
Edge (Legacy)12+IE11
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

MutationRecord/oldValue

In all current engines.

Firefox14+Safari7+Chrome16+
Opera?Edge79+
Edge (Legacy)12+IE11
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

MutationRecord/previousSibling

In all current engines.

Firefox14+Safari7+Chrome16+
Opera?Edge79+
Edge (Legacy)12+IE11
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

MutationRecord/removedNodes

In all current engines.

Firefox14+Safari7+Chrome16+
Opera?Edge79+
Edge (Legacy)12+IE11
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

MutationRecord/target

In all current engines.

Firefox14+Safari7+Chrome16+
Opera?Edge79+
Edge (Legacy)12+IE11
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

MutationRecord/type

In all current engines.

Firefox14+Safari7+Chrome16+
Opera?Edge79+
Edge (Legacy)12+IE11
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

MutationRecord

In all current engines.

Firefox14+Safari7+Chrome16+
Opera?Edge79+
Edge (Legacy)12+IE11
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

NamedNodeMap/getNamedItem

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE6+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

NamedNodeMap/getNamedItemNS

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

NamedNodeMap/item

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE5+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

NamedNodeMap/length

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE5+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

NamedNodeMap/removeNamedItem

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE6+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

NamedNodeMap/removeNamedItemNS

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

NamedNodeMap/setNamedItem

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE6+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

NamedNodeMap/setNamedItemNS

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

NamedNodeMap

In all current engines.

Firefox34+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE5+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Node/appendChild

In all current engines.

Firefox1+Safari1.1+Chrome1+
Opera7+Edge79+
Edge (Legacy)12+IE5+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

Node/baseURI

In all current engines.

Firefox1+Safari4+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IENone
Firefox for Android?iOS Safari1+Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Node/childNodes

In all current engines.

Firefox1+Safari1.2+Chrome1+
Opera7+Edge79+
Edge (Legacy)12+IE5+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

Node/cloneNode

In all current engines.

Firefox1+Safari1.1+Chrome1+
Opera7+Edge79+
Edge (Legacy)12+IE6+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

Node/compareDocumentPosition

In all current engines.

Firefox1+Safari4+Chrome2+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile12.1+
MDN

Node/contains

In all current engines.

Firefox9+Safari1.1+Chrome16+
Opera7+Edge79+
Edge (Legacy)12+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

Node/firstChild

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE6+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Node/getRootNode

In all current engines.

Firefox53+Safari10.1+Chrome54+
Opera?Edge79+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

Node/hasChildNodes

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE6+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Node/insertBefore

In all current engines.

Firefox1+Safari1.1+Chrome1+
Opera7+Edge79+
Edge (Legacy)12+IE6+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

Node/isConnected

In all current engines.

Firefox49+Safari10+Chrome51+
Opera?Edge79+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet6.0+Opera Mobile?
MDN

Node/isDefaultNamespace

In all current engines.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari1+Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Node/isEqualNode

In all current engines.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari1+Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Node/isSameNode

In all current engines.

Firefox48+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari1+Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Node/lastChild

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE6+
Firefox for Android45+iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Node/lookupNamespaceURI

In all current engines.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari1+Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Node/lookupPrefix

In all current engines.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari1+Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Node/nextSibling

In all current engines.

Firefox1+Safari1.1+Chrome1+
Opera7+Edge79+
Edge (Legacy)12+IE5.5+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

Node/nodeName

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE6+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Node/nodeType

In all current engines.

Firefox1+Safari1.1+Chrome1+
Opera7+Edge79+
Edge (Legacy)12+IE6+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

Node/nodeValue

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE6+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Node/normalize

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Node/ownerDocument

In all current engines.

Firefox9+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE6+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Node/parentElement

In all current engines.

Firefox9+Safari1.1+Chrome1+
Opera7+Edge79+
Edge (Legacy)12+IE8+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

Node/parentNode

In all current engines.

Firefox1+Safari1.1+Chrome1+
Opera7+Edge79+
Edge (Legacy)12+IE5.5+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

Node/previousSibling

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE5.5+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Node/removeChild

In all current engines.

Firefox1+Safari1.1+Chrome1+
Opera7+Edge79+
Edge (Legacy)12+IE5+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

Node/replaceChild

In all current engines.

Firefox1+Safari1.1+Chrome1+
Opera7+Edge79+
Edge (Legacy)12+IE6+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

Node/textContent

In all current engines.

Firefox1+Safari3+Chrome1+
Opera9+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari1+Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

Node

In all current engines.

Firefox1+Safari1+Chrome1+
Opera7+Edge79+
Edge (Legacy)12+IE5+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile10.1+
MDN

NodeIterator/filter

In all current engines.

Firefox3.5+Safari3+Chrome1+
Opera9+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari3+Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

NodeIterator/nextNode

In all current engines.

Firefox3.5+Safari3+Chrome1+
Opera9+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari3+Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

NodeIterator/pointerBeforeReferenceNode

In all current engines.

Firefox3.5+Safari3+Chrome1+
Opera15+Edge79+
Edge (Legacy)17+IENone
Firefox for Android?iOS Safari3+Chrome for Android?Android WebView?Samsung Internet?Opera Mobile14+
MDN

NodeIterator/previousNode

In all current engines.

Firefox3.5+Safari3+Chrome1+
Opera9+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari3+Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

NodeIterator/referenceNode

In all current engines.

Firefox3.5+Safari3+Chrome1+
Opera15+Edge79+
Edge (Legacy)17+IENone
Firefox for Android?iOS Safari3+Chrome for Android?Android WebView?Samsung Internet?Opera Mobile14+
MDN

NodeIterator/root

In all current engines.

Firefox3.5+Safari3+Chrome1+
Opera9+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari3+Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

NodeIterator/whatToShow

In all current engines.

Firefox3.5+Safari3+Chrome1+
Opera9+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari3+Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

NodeIterator

In all current engines.

Firefox3.5+Safari3+Chrome1+
Opera9+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari3+Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

NodeList/forEach

In all current engines.

Firefox50+Safari10+Chrome51+
Opera?Edge79+
Edge (Legacy)16+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?

Reference/Global_Objects/Array/@@iterator

In all current engines.

Firefox36+Safari10+Chrome51+
Opera?Edge79+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?

NodeList

In all current engines.

Firefox1+Safari1+Chrome1+
Opera8+Edge79+
Edge (Legacy)12+IE5+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

NodeList/item

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE5+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

NodeList/length

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE5+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

ProcessingInstruction/target

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

ProcessingInstruction

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Range/Range

In all current engines.

Firefox24+Safari8+Chrome29+
Opera?Edge79+
Edge (Legacy)15+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

Range/cloneContents

In all current engines.

Firefox1+Safari1+Chrome1+
Opera9+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

Range/cloneRange

In all current engines.

Firefox1+Safari1+Chrome1+
Opera9+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

Range/collapse

In all current engines.

Firefox1+Safari1+Chrome1+
Opera9+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

Range/commonAncestorContainer

In all current engines.

Firefox1+Safari1+Chrome1+
Opera9+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

Range/compareBoundaryPoints

In all current engines.

Firefox1+Safari1+Chrome1+
Opera9+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

Range/comparePoint

In all current engines.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)17+IENone
Firefox for Android?iOS Safari1+Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Range/deleteContents

In all current engines.

Firefox1+Safari1+Chrome1+
Opera9+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

Range/detach

Firefox1–15Safari1+Chrome1+
Opera9+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

Range/extractContents

In all current engines.

Firefox1+Safari1+Chrome1+
Opera9+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

Range/insertNode

In all current engines.

Firefox1+Safari1+Chrome1+
Opera9+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

Range/intersectsNode

In all current engines.

Firefox17+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)17+IENone
Firefox for Android19+iOS Safari1+Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Range/isPointInRange

In all current engines.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)15+IENone
Firefox for Android?iOS Safari1+Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Range/selectNode

In all current engines.

Firefox1+Safari1+Chrome1+
Opera9+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

Range/selectNodeContents

In all current engines.

Firefox1+Safari1+Chrome1+
Opera9+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

Range/setEnd

In all current engines.

Firefox1+Safari1+Chrome1+
Opera9+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

Range/setEndAfter

In all current engines.

Firefox1+Safari1+Chrome1+
Opera9+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

Range/setEndBefore

In all current engines.

Firefox1+Safari1+Chrome1+
Opera9+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

Range/setStart

In all current engines.

Firefox1+Safari1+Chrome1+
Opera9+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

Range/setStartAfter

In all current engines.

Firefox1+Safari1+Chrome1+
Opera9+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

Range/setStartBefore

In all current engines.

Firefox1+Safari1+Chrome1+
Opera9+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

Range/surroundContents

In all current engines.

Firefox1+Safari1+Chrome1+
Opera9+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

Range/toString

In all current engines.

Firefox1+Safari1+Chrome1+
Opera9+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

Range

In all current engines.

Firefox1+Safari1+Chrome1+
Opera9+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
MDN

ShadowRoot/delegatesFocus

In all current engines.

Firefox94+Safari15+Chrome53+
Opera?Edge79+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

ShadowRoot/host

In all current engines.

Firefox63+Safari10+Chrome53+
Opera?Edge79+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

ShadowRoot/mode

In all current engines.

Firefox63+Safari10.1+Chrome53+
Opera?Edge79+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

ShadowRoot/slotAssignment

In all current engines.

Firefox92+Safari16.4+Chrome86+
Opera?Edge86+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

ShadowRoot

In all current engines.

Firefox63+Safari10+Chrome53+
Opera?Edge79+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

StaticRange/StaticRange

In all current engines.

Firefox71+Safari13.1+Chrome90+
Opera?Edge90+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

StaticRange

In all current engines.

Firefox69+Safari10.1+Chrome60+
Opera?Edge79+
Edge (Legacy)18IENone
Firefox for Android79+iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

Text/Text

In all current engines.

Firefox24+Safari8+Chrome29+
Opera?Edge79+
Edge (Legacy)16+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

Text/splitText

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE5+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView1+Samsung Internet?Opera Mobile12.1+
MDN

Text/wholeText

In all current engines.

Firefox3.5+Safari4+Chrome2+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

Text

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE5+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile12.1+
MDN

TreeWalker/currentNode

In all current engines.

Firefox4+Safari3+Chrome1+
Opera9+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari3+Chrome for Android?Android WebView3+Samsung Internet?Opera Mobile10.1+
MDN

TreeWalker/filter

In all current engines.

Firefox4+Safari3+Chrome1+
Opera9+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari3+Chrome for Android?Android WebView3+Samsung Internet?Opera Mobile10.1+
MDN

TreeWalker/firstChild

In all current engines.

Firefox4+Safari3+Chrome1+
Opera9+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari3+Chrome for Android?Android WebView3+Samsung Internet?Opera Mobile10.1+
MDN

TreeWalker/lastChild

In all current engines.

Firefox4+Safari3+Chrome1+
Opera9+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari3+Chrome for Android?Android WebView3+Samsung Internet?Opera Mobile10.1+
MDN

TreeWalker/nextNode

In all current engines.

Firefox4+Safari3+Chrome1+
Opera9+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari3+Chrome for Android?Android WebView3+Samsung Internet?Opera Mobile10.1+
MDN

TreeWalker/nextSibling

In all current engines.

Firefox4+Safari3+Chrome1+
Opera9+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari3+Chrome for Android?Android WebView3+Samsung Internet?Opera Mobile10.1+
MDN

TreeWalker/parentNode

In all current engines.

Firefox4+Safari3+Chrome1+
Opera9+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari3+Chrome for Android?Android WebView3+Samsung Internet?Opera Mobile10.1+
MDN

TreeWalker/previousNode

In all current engines.

Firefox4+Safari3+Chrome1+
Opera9+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari3+Chrome for Android?Android WebView3+Samsung Internet?Opera Mobile10.1+
MDN

TreeWalker/previousSibling

In all current engines.

Firefox4+Safari3+Chrome1+
Opera9+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari3+Chrome for Android?Android WebView3+Samsung Internet?Opera Mobile10.1+
MDN

TreeWalker/root

In all current engines.

Firefox4+Safari3+Chrome1+
Opera9+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari3+Chrome for Android?Android WebView3+Samsung Internet?Opera Mobile10.1+
MDN

TreeWalker/whatToShow

In all current engines.

Firefox4+Safari3+Chrome1+
Opera9+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari3+Chrome for Android?Android WebView3+Samsung Internet?Opera Mobile10.1+
MDN

TreeWalker

In all current engines.

Firefox4+Safari3+Chrome1+
Opera9+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari3+Chrome for Android?Android WebView3+Samsung Internet?Opera Mobile10.1+
MDN

XMLDocument

In all current engines.

Firefox1+Safari10+Chrome34+
Opera21+Edge79+
Edge (Legacy)12+IE11
Firefox for Android?iOS Safari10+Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile21+
MDN

XPathEvaluator/XPathEvaluator

In all current engines.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IENone
Firefox for Android?iOS Safari1+Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

XPathEvaluator

In all current engines.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IENone
Firefox for Android?iOS Safari1+Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

XPathExpression/evaluate

In all current engines.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IENone
Firefox for Android?iOS Safari1+Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

XPathExpression

In all current engines.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IENone
Firefox for Android?iOS Safari1+Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

XPathResult/booleanValue

In all current engines.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IENone
Firefox for Android?iOS Safari1+Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

XPathResult/invalidIteratorState

In all current engines.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IENone
Firefox for Android?iOS Safari1+Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile12.1+
MDN

XPathResult/iterateNext

In all current engines.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IENone
Firefox for Android?iOS Safari1+Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

XPathResult/numberValue

In all current engines.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IENone
Firefox for Android?iOS Safari1+Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

XPathResult/resultType

In all current engines.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IENone
Firefox for Android?iOS Safari1+Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile12.1+
MDN

XPathResult/singleNodeValue

In all current engines.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IENone
Firefox for Android?iOS Safari1+Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

XPathResult/snapshotItem

In all current engines.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IENone
Firefox for Android?iOS Safari1+Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

XPathResult/snapshotLength

In all current engines.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IENone
Firefox for Android?iOS Safari1+Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

XPathResult/stringValue

In all current engines.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IENone
Firefox for Android?iOS Safari1+Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

XPathResult

In all current engines.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IENone
Firefox for Android?iOS Safari1+Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
MDN

XSLTProcessor/XSLTProcessor

In all current engines.

Firefox1+Safari3.1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView3+Samsung Internet?Opera Mobile12.1+
MDN

XSLTProcessor/clearParameters

In all current engines.

Firefox1+Safari3.1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView3+Samsung Internet?Opera Mobile12.1+
MDN

XSLTProcessor/getParameter

In all current engines.

Firefox1+Safari3.1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView3+Samsung Internet?Opera Mobile12.1+
MDN

XSLTProcessor/importStylesheet

In all current engines.

Firefox1+Safari3.1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView3+Samsung Internet?Opera Mobile12.1+
MDN

XSLTProcessor/removeParameter

In all current engines.

Firefox1+Safari3.1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView3+Samsung Internet?Opera Mobile12.1+
MDN

XSLTProcessor/reset

In all current engines.

Firefox1+Safari3.1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView3+Samsung Internet?Opera Mobile12.1+
MDN

XSLTProcessor/setParameter

In all current engines.

Firefox1+Safari3.1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView3+Samsung Internet?Opera Mobile12.1+
MDN

XSLTProcessor/transformToDocument

In all current engines.

Firefox1+Safari3.1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView3+Samsung Internet?Opera Mobile12.1+
MDN

XSLTProcessor/transformToFragment

In all current engines.

Firefox1+Safari3.1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView3+Samsung Internet?Opera Mobile12.1+
MDN

XSLTProcessor

In all current engines.

Firefox1+Safari3.1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView3+Samsung Internet?Opera Mobile12.1+
MDN

Element/slot

In all current engines.

Firefox63+Safari10+Chrome53+
Opera?Edge79+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?