DOM

現行標準 — 最終更新

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

概要

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

1. 基盤

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

この仕様で使用される用語の一部は、EncodingSelectorsTrusted TypesWeb IDLXMLNamespaces in XML、およびAssociating Style Sheets with XML documentsで定義されている。 [ENCODING] [SELECTORS4] [TRUSTED-TYPES] [WEBIDL] [XML] [XML-NAMES] [XML-STYLESHEET]

拡張が必要な場合、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. セレクター

セレクター文字列のスコープマッチを、文字列 selectorsノード node に対して行うには:

  1. selector を、セレクターを構文解析する selectors の結果とする。 [SELECTORS4]

  2. もし selector が失敗であれば、スローする "SyntaxError" DOMException を。

  3. selectornodeルートを使い、セレクターをツリーに対してマッチさせるを、スコーピングルート 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. prefixqualifiedName の最初の U+003A(:)より前の部分に設定する。

    2. localNamequalifiedName の最初の U+003A(:)より後ろの部分に設定する。

    3. 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]

イベントには、関連付けられた パスがある。 パスは、リストであり、イベントパス項目からなる。イベントパス項目は、構造体であり、 呼び出し対象EventTarget オブジェクト)、 シャドウツリー内の呼び出し対象 (真偽値)、 シャドウ調整済み対象潜在的なイベント ターゲット)、 relatedTarget潜在的なイベント ターゲット)、 タッチ対象リストリストであり、潜在的なイベント ターゲットからなる)、 閉じたツリーのルート(真偽値)、 および 閉じたツリー内のスロット( 真偽値)から構成される。パスは、初期状態では 空リストである。

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. paththisパスとする。

  3. path空であるなら、composedPath を返す。

  4. currentTargetthiscurrentTarget 属性値とする。

  5. Assert: currentTargetEventTarget オブジェクトである。

  6. currentTargetcomposedPath追加する。

  7. currentTargetIndex を 0 とする。

  8. currentTargetHiddenSubtreeLevel を 0 とする。

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

  10. index が 0 以上である間:

    1. path[index] の閉じたツリーのルートが true なら、currentTargetHiddenSubtreeLevel を 1 増やす。

    2. path[index] の呼び出し対象currentTarget なら、currentTargetIndexindex に設定し、 中断する。

    3. path[index] の閉じたツリー内のスロットが true なら、currentTargetHiddenSubtreeLevel を 1 減らす。

    4. index を 1 減らす。

  11. currentHiddenLevel および maxHiddenLevelcurrentTargetHiddenSubtreeLevel とする。

  12. indexcurrentTargetIndex − 1 に設定する。

  13. index が 0 以上である間:

    1. path[index] の閉じたツリーのルートが true なら、currentHiddenLevel を 1 増やす。

    2. currentHiddenLevelmaxHiddenLevel 以下なら、 path[index] の 呼び出し対象composedPath前置する。

    3. path[index] の閉じたツリー内のスロットが true なら:

      1. currentHiddenLevel を 1 減らす。

      2. currentHiddenLevelmaxHiddenLevel より小さいなら、 maxHiddenLevelcurrentHiddenLevel に設定する。

    4. index を 1 減らす。

  14. currentHiddenLevel および maxHiddenLevelcurrentTargetHiddenSubtreeLevel に設定する。

  15. indexcurrentTargetIndex + 1 に設定する。

  16. indexpathサイズ未満である間:

    1. path[index] の閉じたツリー内のスロットが true なら、currentHiddenLevel を 1 増やす。

    2. currentHiddenLevelmaxHiddenLevel 以下なら、 path[index] の 呼び出し対象composedPath追加する。

    3. path[index] の閉じたツリーのルートが 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を持ちません。

将来的には、カスタムの親を取得するアルゴリズムを許可できるかもしれません。これが 有用であれば、issue #583 を支援してください。現時点では、すべての 作者が作成したEventTargetは ツリー構造に参加しません。

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

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

  2. falseを返す。

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

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

  2. もし listenersignal が null でなく、 かつ 中止されている 場合は、return する。

  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 について:listenertype が "fetch" であり、listenercallback が null でなければ、 その listenercallbackcallbacks に追加する。

  3. callbacks を返す。

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

イベント eventEventTarget オブジェクト target へ、任意の legacy target override flag および 任意の legacyOutputDidListenersThrowFlag とともに 配送するには:

  1. eventdispatch flag を設定する。

  2. legacy target override flag が与えられていない場合は target を、 そうでない場合は target関連付けられた DocumenttargetOverride とする。 [HTML]

    legacy target override flag は HTML によってのみ、 かつ targetWindow オブジェクトである場合にのみ使用される。

  3. activationTarget を null とする。

  4. eventrelatedTargettarget に対して リターゲットした結果を relatedTarget とする。

  5. clearTargets を false とする。

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

    1. touchTargets を新しい リストとする。

    2. eventtouch target list の各 touchTarget について: touchTargettarget に対して リターゲットした結果を touchTargets追加する。

    3. event, target, targetOverride, relatedTarget, touchTargets, および false を用いて イベントパスに追加する。

    4. eventMouseEvent オブジェクトであり、 eventtype 属性が "click" である場合は isActivationEvent を true とし、 そうでなければ false とする。

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

    6. targetslottable であり、かつ 割り当て済みである場合は targetslottable とし、そうでなければ null とする。

    7. slotInClosedTree を false とする。

    8. targetget the parentevent とともに呼び出した結果を parent とする。

    9. parent が非 null の間:

      1. slottable が非 null である場合:

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

        2. slottable を null に設定する。

        3. parentrootshadow root であり、その mode が "closed" である場合は、slotInClosedTree を true に設定する。

      2. parentslottable であり、かつ 割り当て済み である場合は、slottableparent に設定する。

      3. eventrelatedTargetparent に対して リターゲットした結果を relatedTarget とする。

      4. touchTargets を新しい リストとする。

      5. eventtouch target list の各 touchTarget について: touchTargetparent に対して リターゲットした結果を touchTargets追加する。

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

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

        2. event, parent, null, relatedTarget, touchTargets, および slotInClosedTree を用いて イベントパスに追加する。

      7. そうでなく、parentrelatedTarget である場合は、 parent を null に設定する。

      8. そうでない場合:

        1. targetparent に設定する。

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

        3. event, parent, target, relatedTarget, touchTargets, および slotInClosedTree を用いて イベントパスに追加する。

      9. parent が非 null である場合は、 parentget the parentevent とともに呼び出した結果に parent を設定する。

      10. slotInClosedTree を false に設定する。

    10. eventpath における、 shadow-adjusted target が 非 null である最後の event path itemclearTargetsItem とする。

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

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

    13. eventpath の各 item について、逆順で:

      1. itemshadow-adjusted target が非 null である場合は、 eventeventPhase 属性を AT_TARGET に設定する。

      2. そうでない場合は、eventeventPhase 属性を CAPTURING_PHASE に設定する。

      3. item, event, "capturing", および 与えられていれば legacyOutputDidListenersThrowFlag を用いて 呼び出す

    14. eventpath の各 item について:

      1. itemshadow-adjusted target が非 null である場合は、 eventeventPhase 属性を AT_TARGET に設定する。

      2. そうでない場合:

        1. eventbubbles 属性が false である場合は、 continue する。

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

      3. item, event, "bubbling", および 与えられていれば legacyOutputDidListenersThrowFlag を用いて 呼び出す

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

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

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

  10. eventdispatch flagstop propagation flag、 および stop 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 を返す。

イベント eventEventTarget オブジェクト invocationTarget潜在的な イベントターゲット shadowAdjustedTarget潜在的なイベントターゲット relatedTargetリストである 潜在的なイベントターゲットたち touchTargets、およびブール値 slotInClosedTree が与えられたとき、 イベントパスに 追加するには:

  1. invocationTargetInShadowTree を false とする。

  2. invocationTargetnode であり、その rootshadow root である場合は、invocationTargetInShadowTree を true に設定する。

  3. rootOfClosedTree を false とする。

  4. invocationTarget が、その mode が "closed" である shadow root の場合は、 rootOfClosedTree を true に設定する。

  5. eventpath に、 新しい event path item追加する。その invocation targetinvocationTargetinvocation-target-in-shadow-treeinvocationTargetInShadowTreeshadow-adjusted targetshadowAdjustedTargetrelatedTargetrelatedTargettouch target listtouchTargetsroot-of-closed-treerootOfClosedTree、かつ slot-in-closed-treeslotInClosedTree である。

event path item pathItemイベント event、文字列 phase、および任意の legacyOutputDidListenersThrowFlag が与えられたとき、 呼び出すには:

  1. targetItempathItem とする。

  2. targetItemshadow-adjusted target が null である間: eventpath において targetItem の直前にある event path itemtargetItem を設定する。

  3. eventtarget を、targetItemshadow-adjusted target に設定する。

  4. eventrelatedTarget を、pathItemrelatedTarget に設定する。

  5. eventtouch target list を、pathItemtouch target list に設定する。

  6. eventstop propagation flag が設定されている場合は、return する。

  7. eventcurrentTarget 属性を、pathIteminvocation target に初期化する。

  8. eventcurrentTarget 属性値の event listener list複製listeners とする。

    これにより、この時点以降に追加された event listener が 実行されることを防ぐ。なお、削除は removed フィールドにより 依然として効果を持つ。

  9. pathIteminvocation-target-in-shadow-treeinvocationTargetInShadowTree とする。

  10. event, listeners, phase, invocationTargetInShadowTree, および 与えられていれば legacyOutputDidListenersThrowFlag を用いて inner invoke を実行した結果を found とする。

  11. found が false で、かつ eventisTrusted 属性が true である場合:

    1. eventtype 属性値を originalEventType とする。

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

      イベント型 レガシーイベント型
      "animationend" "webkitAnimationEnd"
      "animationiteration" "webkitAnimationIteration"
      "animationstart" "webkitAnimationStart"
      "transitionend" "webkitTransitionEnd"
    3. event, listeners, phase, invocationTargetInShadowTree, および 与えられていれば legacyOutputDidListenersThrowFlag を用いて Inner invoke する。

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

イベント eventリストである event listenerたち listeners、 文字列 phase、ブール値 invocationTargetInShadowTree、および任意の legacyOutputDidListenersThrowFlag が与えられたとき、 inner invoke するには:

  1. found を false とする。

  2. listeners の各 listener のうち、その removed が false であるものについて:

    1. eventtype 属性値が listenertype でない場合は、 continue する。

    2. found を true に設定する。

    3. phase が "capturing" であり、かつ listenercapture が false である場合は、 continue する。

    4. phase が "bubbling" であり、かつ listenercapture が true である場合は、 continue する。

    5. listeneronce が true である場合は、 eventcurrentTarget 属性値 および listener が与えられたものとして イベントリスナーを削除する

    6. listenercallback関連付けられたレルムグローバルオブジェクトglobal とする。

    7. currentEvent を undefined とする。

    8. globalWindow オブジェクトである場合:

      1. globalcurrent eventcurrentEvent に設定する。

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

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

    10. globalWindow オブジェクトである場合は、 event および listener が与えられたものとして イベントリスナーのタイミング情報を記録する

    11. listenercallback、"handleEvent"、« event »、および eventcurrentTarget 属性値を用いて ユーザーオブジェクトの操作を呼び出す。 これが例外 exception を投げた場合:

      1. listenercallback に対応する JavaScript オブジェクトの 関連付けられたレルムグローバルオブジェクトについて、 exception報告する。

      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 は、 作成、 初期化、および 配送を行うことを指す、 イベントについての短縮表現である。 イベントを発火するは、 その処理を書き下しやすくする。

イベントがその bubbles または cancelable 属性を初期化する必要がある場合、 「targetsubmit という名前のイベントを発火する。その cancelable 属性は true に初期化する」と書ける。

また、カスタムコンストラクターが必要な場合は、 「MouseEvent を用いて targetclick という名前のイベントを発火する。その detail 属性は 1 に初期化する」と書ける。

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

  1. targetlike という名前のイベントを発火する結果を doAction とする。

  2. doAction が true である場合は、…

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

イベントは、 アクションではなく、発生した事柄を意味する。別の言い方をすれば、それは アルゴリズムからの通知を表し、そのアルゴリズムの今後の進行に影響を与えるために 使用できる(例: preventDefault() を呼び出すことによって)。 イベントは、 何らかのアルゴリズムの実行開始を引き起こすアクションや開始要因として 使用してはならない。それはイベントの目的ではない。

ここでこれを特に明記しているのは、DOM の以前の 反復版には、イベントに関連付けられた "default actions" という概念があり、人々にまったく誤った考えを与えていたためである。 イベントはアクションを表すものでも、 アクションを引き起こすものでもなく、進行中のアクションに影響を与えるためにのみ使用できる。

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実装するオブジェクトは、継承されたインターフェイスも実装する: Document, DocumentType, DocumentFragment, Element, CharacterData, or Attr

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

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

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

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

したがって、すべてのノード一次インターフェイスは、次のいずれかである: Document, DocumentType, DocumentFragment, ShadowRoot, Element または Element の継承されたインターフェイス, Attr, Text, CDATASection, ProcessingInstruction, or 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. 変更アルゴリズム

ノード nodeノード parent、null または ノード child、およびリストである ノード群 childrenToExcludeが与えられたとき、挿入前の妥当性を確保するには、次を実行する:

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

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

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

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

  5. parent文書でない場合:

    1. node文書型である場合、 "HierarchyRequestError" DOMException投げる

    2. 返す。

  6. nodeText ノードである場合、 "HierarchyRequestError" DOMException投げる

  7. nodeCharacterData ノードである場合、返す。

  8. nodeDocumentFragment ノードである場合:

    1. nodeに複数の要素があるか、 Text ノードがある場合、 "HierarchyRequestError" DOMException投げる

    2. node要素がない場合、返す。

  9. nodeDocumentFragment またはElement ノードである場合:

    1. 次のいずれかが真である場合:

      その場合、"HierarchyRequestError" DOMException投げる

    2. 返す。

  10. 表明node文書型である。

  11. 次のいずれかが真である場合:

    その場合、"HierarchyRequestError" DOMException投げる

ノード nodeを、ノードparent内の、null またはノード childの前に事前挿入するには、次を実行する:

  1. nodeparentchild、および « » を与えて、 挿入前の妥当性を確保する

  2. referenceChildchildとする。

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

  4. nodeparent内のreferenceChildの前に挿入する

  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)'; // '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 を 実行したりする、接続関連の処理を行う機会を提供することである。これらの手順により、複数のノードを、 スクリプトに対して不可分に挿入でき、主要な副作用は、ノードツリーへの一括挿入が完了した にすべて発生する。これにより、保留中のすべてのノードツリーへの挿入が完全に終了してから、 さらなる挿入が行われることが保証される。

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

ノード nodeを、ノードparent内の、null またはノード childの前に、任意選択の真偽値suppressObservers(既定値は false)を指定して 挿入するには、次を実行する:

  1. nodeDocumentFragment ノードである場合は、nodesnode子群とし、そうでない場合は « node » とする。

  2. countnodesサイズとする。

  3. countが 0 の場合、返す。

  4. nodeDocumentFragment ノードである場合:

    1. suppressObserversを true に 設定して、その子群除去する

    2. « »、nodes、null、および null を指定して、nodeについて ツリー変更レコードをキューに入れる

      この手順は、意図的にsuppressObserversを考慮しない。

  5. childが非 null である場合:

    1. 始端ノードparentであり、 始端オフセットchildインデックスより大きい、各ライブ範囲について、その始端オフセットcountだけ増加させる。

    2. 終端ノードparentであり、 終端オフセットchildインデックスより大きい、各ライブ範囲について、その終端オフセットcountだけ増加させる。

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

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

    1. nodeparentノード文書受け入れる

    2. childが null の場合、nodeparent子群付加する

    3. そうでない場合、nodeparent子群の、 childインデックスの前に挿入する

    4. parentが、シャドウルートスロット割り当てが "named" であるシャドウホストであり、 nodeスロット可能である場合、 nodeスロットを割り当てる

    5. parentルートシャドウルートであり、 parentが、割り当てられたノード群が空のリストである スロットである場合、parentについて スロット変更を通知する

    6. nodeルートを指定して、ツリーのスロット可能要素を割り当てる

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

      1. inclusiveDescendantを指定して、挿入手順を実行する。

      2. inclusiveDescendant接続済みでない場合、 継続する

      3. inclusiveDescendant要素であり、 inclusiveDescendantカスタム要素レジストリが 非 null である場合:

        1. inclusiveDescendantカスタム要素レジストリスコープ付きであるが true の場合、 inclusiveDescendantノード文書を、 inclusiveDescendantカスタム要素レジストリスコープ付き文書集合付加する

        2. inclusiveDescendantカスタムである場合、 inclusiveDescendant、コールバック名 "connectedCallback"、および « » を指定して、 カスタム要素コールバック反応をキューに入れる

        3. そうでない場合、inclusiveDescendantアップグレードを試みる

          これによって inclusiveDescendantが正常にアップグレードされた場合、 そのconnectedCallbackは、要素をアップグレードする アルゴリズムの実行中に自動的にキューへ入れられる。

      4. そうでなく、inclusiveDescendantシャドウルートであり、 inclusiveDescendantカスタム要素レジストリが 非 null であり、そのカスタム要素レジストリスコープ付きであるが true の場合、 inclusiveDescendantノード文書を、 inclusiveDescendantカスタム要素レジストリスコープ付き文書集合付加する

  8. suppressObserversが false の場合、nodes、« »、 previousSibling、およびchildを指定して、parentについて ツリー変更レコードをキューに入れる

  9. parentについて子変更手順を実行する。

  10. staticNodeListを、初期状態が « » であるノードリストとする。

    いずれかの接続後手順を呼び出すに すべてのノードを収集し、ノードツリーを走査 しながら接続後手順を呼び出さない。これは、 接続後手順がツリー構造を変更できるため、 ライブ走査が安全でなくなり、同じノードについて接続後手順が複数回呼び出される可能性があるためである。

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

    1. nodeの各シャドウを含む包括的子孫 inclusiveDescendantについて、シャドウを含むツリー順で、 inclusiveDescendantstaticNodeList付加する

  12. staticNodeListnodeについて、node接続済みである場合、nodeを指定して接続後手順を実行する。

ノード nodeノードparent付加するには、 nodeparent内の null の前に事前挿入する


仕様は、すべてまたは一部のノードについて、 移動手順を定義してもよい。下記の移動アルゴリズムに示すように、このアルゴリズムには ノードmovedNode、真偽値 isSubtreeRoot、およびノードoldAncestorが渡される。 挿入手順と同様に、これらの手順は、 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要素があるか、 child文書型であるか、またはchildが非 null であり、 文書型child後続する場合、"HierarchyRequestError" DOMException投げる

  7. oldParentnodeとする。

  8. 表明oldParentは非 null である。

  9. nodeを指定して、ライブ範囲の除去前手順を実行する。

  10. ルートノード文書nodeノード文書である、各NodeIterator オブジェクトiteratorについて、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. childが非 null の場合はchild前の兄弟を、そうでない場合は newParent最後の子を、newPreviousSiblingとする。

  19. childが null の場合、nodenewParent子群付加する

  20. そうでない場合、nodenewParent子群の、 childインデックスの前に挿入する

  21. newParentが、シャドウルートスロット割り当てが "named" であるシャドウホストであり、nodeスロット可能である場合、nodeスロットを割り当てる

  22. newParentルートシャドウルートであり、 newParentが、割り当てられたノード群であるスロットである場合、 newParentについてスロット変更を通知する

  23. nodeルートを指定して、ツリーのスロット可能要素を割り当てる

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

    1. inclusiveDescendantnodeである場合は isSubtreeRootを true とし、そうでない場合は false とする。

    2. inclusiveDescendantisSubtreeRoot、および oldParentを指定して、移動手順を実行する。

      移動アルゴリズムは、挿入および除去とは別のプリミティブであるため、 inclusiveDescendantについて挿入手順または除去手順を呼び出さない。

    3. inclusiveDescendantカスタムであり、 newParent接続済みである場合、 inclusiveDescendant、コールバック名 "connectedMoveCallback"、および « » を指定して、カスタム要素コールバック反応をキューに入れる

  25. « »、« node »、oldPreviousSibling、および oldNextSiblingを指定して、oldParentについてツリー変更レコードをキューに入れる

  26. « node »、« »、newPreviousSibling、および childを指定して、newParentについてツリー変更レコードをキューに入れる


ノード parent内のノードchildを、ノードnode置換するには、次を実行する:

  1. nodeparentchild、および « child » を指定して、挿入前の妥当性を確保する

  2. referenceChildchild次の兄弟とする。

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

  4. previousSiblingchild前の兄弟とする。

  5. removedNodesを空集合とする。

  6. nodeparentノード文書受け入れる

  7. childが非 null である場合:

    1. removedNodesを « child » に設定する。

    2. suppressObserversを true に 設定して、child除去する

    上記が false になり得るのは、childnodeである場合のみである。

  8. nodeDocumentFragment ノードである場合は、nodesnode子群とし、そうでない場合は « node » とする。

  9. suppressObserversを true に設定して、 nodeparent内のreferenceChildの前に挿入する

  10. nodesremovedNodespreviousSibling、および referenceChildを指定して、parentについてツリー変更レコードをキューに入れる

  11. childを返す。

ノードまたは null であるnodeを用いて、ノードparent内をすべて置換するには、次を実行する:

  1. removedNodesparent子群とする。

  2. addedNodesを空集合とする。

  3. nodeDocumentFragment ノードである場合、addedNodesnode子群に設定する。

  4. そうでなく、nodeが非 null である場合、addedNodesを « node » に設定する。

  5. suppressObserversを true に設定して、 parentのすべてのを、ツリー順除去する

  6. nodeが非 null である場合、suppressObserversを true に設定して、 nodeparent内の null の前に挿入する

  7. addedNodesまたはremovedNodesのいずれかが空でない場合、addedNodesremovedNodes、null、および null を指定して、parentについて ツリー変更レコードをキューに入れる

このアルゴリズムは、ノードツリーの制約に関する チェックを一切行わない。仕様作成者は、これを慎重に使用する必要がある。


ノード childノードparentから事前除去するには、次を実行する:

  1. childparentでない場合、 "NotFoundError" DOMException投げる

  2. child除去する

  3. childを返す。

仕様は、すべてまたは一部のノードについて、 除去手順を定義してもよい。下記の除去アルゴリズムに示すように、このアルゴリズムには ノードremovedNode、真偽値 isSubtreeRoot、およびノードoldAncestorが渡される。

ノード nodeを、任意選択の真偽値suppressObservers(既定値は false)を指定して 除去するには、次を実行する:

  1. parentnodeとする。

  2. 表明:parentは非 null である。

  3. nodeを指定して、ライブ範囲の除去前手順を実行する。

  4. ルートノード文書nodeノード文書である、各NodeIterator オブジェクトiteratorについて、nodeiteratorを指定して、 NodeIteratorの除去前手順を 実行する。

  5. oldPreviousSiblingnode前の兄弟とする。

  6. oldNextSiblingnode次の兄弟とする。

  7. nodeをそのparent子群から除去する

  8. node割り当て済みである場合、node割り当て先スロットについてスロット可能要素を割り当てる

  9. parentルートシャドウルートであり、 parentが、割り当てられたノード群が空のリストである スロットである場合、parentについて スロット変更を通知する

  10. nodeに、スロットである包括的子孫がある場合:

    1. parentルートを指定して、ツリーのスロット可能要素を割り当てる

    2. nodeを指定して、ツリーのスロット可能要素を割り当てる

  11. node、true、およびparentを指定して、除去手順を実行する。

  12. isParentConnectedparent接続済み状態とする。

  13. nodeカスタムであり、 isParentConnectedが true である場合、node、コールバック名 "disconnectedCallback"、および « » を指定して、カスタム要素コールバック反応をキューに入れる

    現時点では、カスタム要素parentが渡されないのは意図的である。必要が生じた場合、将来変更される可能性がある。

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

    1. descendant、false、およびparentを指定して、除去手順を実行する。

    2. descendantカスタムであり、 isParentConnectedが true である場合、descendant、 コールバック名 "disconnectedCallback"、および « » を指定して、 カスタム要素コールバック反応をキューに入れる

  15. parentの各包括的祖先 inclusiveAncestorについて、次にinclusiveAncestor登録済みオブザーバーリスト内の registeredそれぞれ処理し、registeredオプション["subtree"] が true の場合、オブザーバーregisteredオブザーバーであり、 オプションregisteredオプションであり、 ソースregisteredである新しい一時登録済みオブザーバーを、 node登録済みオブザーバーリスト付加する

  16. suppressObserversが false の場合、« »、« node »、 oldPreviousSibling、およびoldNextSiblingを指定して、 parentについてツリー変更レコードをキューに入れる

  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 である最初の要素を返す。

ID で要素を取得するには、 ノード node と 文字列 elementId が与えられたとき、 node子孫のうち、ツリー順で最初の、IDelementId である要素を返す。 そのような要素が存在しない場合は、null を返す。

getElementById(elementId) メソッドの手順は、thiselementId が与えられたものとして、ID で要素を取得する結果を返すことである。

4.2.5. ミックスイン DocumentOrShadowRoot

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

documentOrShadowRootCustomElementRegistry オブジェクトがあればそれを返し、 そうでなければ null を返す。

customElementRegistry の getter 手順は 次のとおりである:

  1. this文書である場合、thisカスタム要素レジストリを返す。

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

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

DocumentOrShadowRoot mixin は、文書シャドウルートの間で共有される API を定義したい他の 標準によっても使用されることが期待されている。

4.2.6. ミックスイン ParentNode

リストであるノードおよび 文字列 nodes と、文書 document が与えられたとき、ノード群を 単一のノードに変換するには、次を行う:

  1. nodes 内の各文字列を、document とその文字列を指定して テキストノードを作成した結果で 置き換える。

  2. nodesサイズが 1 ならば、nodes[0] を返す。

  3. fragment を、document を指定して文書 フラグメントを作成した結果とする。

  4. nodes の各 node について、nodefragment付加する

  5. fragment を返す。

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
要素を返す。
element = node . firstElementChild
要素である最初のを返す。それ以外の場合は null。
element = node . lastElementChild
要素である最後のを返す。それ以外の場合は null。
node . prepend(nodes)

nodes 内の文字列を同等の Text ノードに 置き換えながら、nodesnode最初の子の前に挿入する。

ノードツリーの制約に違反する場合は、 "HierarchyRequestError" DOMExceptionスローする

node . append(nodes)

nodes 内の文字列を同等の Text ノードに 置き換えながら、nodesnode最後の子の後に挿入する。

ノードツリーの制約に違反する場合は、 "HierarchyRequestError" DOMExceptionスローする

node . replaceChildren(nodes)

nodes 内の文字列を同等の Text ノードに 置き換えながら、node のすべてのnodes で置き換える。

ノードツリーの制約に違反する場合は、 "HierarchyRequestError" DOMExceptionスローする

node . moveBefore(movedNode, child)

movedNode を最初に除去することなく、child が null でなければ child の後に、そうでなければ node最後の子の後に、 node 内へ移動する。このメソッドは、movedNode に関連付けられた状態を 保持する。

ノードツリーの制約に違反する場合、または移動される ノードに関連付けられた状態を保持できない場合は、"HierarchyRequestError" DOMExceptionスローする

node . querySelector(selectors)

selectors に一致する、node子孫である最初の 要素を返す。

node . querySelectorAll(selectors)

selectors に一致する、node のすべての要素子孫を 返す。

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

firstElementChild の取得手順は、 要素である最初のを返し、それ以外の場合は null を返すことである。

lastElementChild の取得手順は、 要素である最後のを返し、それ以外の場合は null を返すことである。

childElementCount の取得手順は、 thisのうち、要素であるものの 数を返すことである。

prepend(nodes) メソッドの手順は 次のとおりである:

  1. node を、nodesthisノード文書を指定してノード群を単一のノードに変換した結果とする。

  2. 事前挿入を用いて、nodethis の、this最初の子の前に挿入する。

append(nodes) メソッドの手順は 次のとおりである:

  1. node を、nodesthisノード文書を指定してノード群を単一のノードに変換した結果とする。

  2. nodethis付加する

replaceChildren(nodes) メソッドの手順は 次のとおりである:

  1. node を、nodesthisノード文書を指定してノード群を単一のノードに変換した結果とする。

  2. nodethis、null、および thisを指定して、事前挿入の妥当性を確保する

  3. this 内のすべてを node置き換える

moveBefore(node, child) メソッドの手順は次のとおりである:

  1. referenceChildchild とする。

  2. referenceChildnode ならば、referenceChildnode次の兄弟に設定する。

  3. nodereferenceChild の前の this 内へ移動する

querySelector(selectors) メソッドの手順は、selectorsthis に対して セレクター文字列をスコープマッチする処理の最初の結果を、 結果が空のリストでない場合に返し、それ以外の場合は null を返すことである。

querySelectorAll(selectors) メソッドの 手順は、selectorsthis に対して セレクター文字列をスコープマッチする処理の 静的な結果を返すことである。

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 の getter 手順は、要素である、 最初の先行する兄弟を返すことであり、そうでなければ null を返す。

nextElementSibling の getter 手順は、要素である、 最初の後続する兄弟を返すことであり、そうでなければ 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)

nodes 内の文字列を同等の Text ノードに 置き換えながら、nodesnode の直前に挿入する。

ノードツリーの制約に違反する場合は、 "HierarchyRequestError" DOMExceptionスローする

node . after(...nodes)

nodes 内の文字列を同等の Text ノードに 置き換えながら、nodesnode の直後に挿入する。

ノードツリーの制約に違反する場合は、 "HierarchyRequestError" DOMExceptionスローする

node . replaceWith(...nodes)

nodes 内の文字列を同等の Text ノードに 置き換えながら、nodenodes で置き換える。

ノードツリーの制約に違反する場合は、 "HierarchyRequestError" DOMExceptionスローする

node . remove()
node を除去する。

before(nodes) メソッドの手順は 次のとおりである:

  1. parentthisとする。

  2. parent が null ならば、返る。

  3. viablePreviousSibling を、this先行する 兄弟のうち、nodes 内にない最初のものとする。 そのようなものがなければ null とする。

  4. node を、nodesthisノード文書を指定して、ノード群を単一のノードに変換した結果とする。

  5. viablePreviousSibling が null ならば、それを parent最初の子に設定する。それ以外の場合は、 viablePreviousSibling次の兄弟に設定する。

  6. 事前挿入を用いて、nodeviablePreviousSibling の前の parent 内に 挿入する。

after(nodes) メソッドの手順は 次のとおりである:

  1. parentthisとする。

  2. parent が null ならば、返る。

  3. viableNextSibling を、this後続する 兄弟のうち、nodes 内にない最初のものとする。 そのようなものがなければ null とする。

  4. node を、nodesthisノード文書を指定して、ノード群を単一のノードに変換した結果とする。

  5. 事前挿入を用いて、nodeviableNextSibling の前の parent 内に 挿入する。

replaceWith(nodes) メソッドの手順は 次のとおりである:

  1. parentthisとする。

  2. parent が null ならば、返る。

  3. viableNextSibling を、this後続する 兄弟のうち、nodes 内にない最初のものとする。 そのようなものがなければ null とする。

  4. node を、nodesthisノード文書を指定して、ノード群を単一のノードに変換した結果とする。

  5. thisparent ならば、thisparent 内で node置き換える

    Thisnode 内に挿入されている可能性がある。

  6. それ以外の場合は、事前挿入を用いて、nodeviableNextSibling の前の parent 内に 挿入する。

remove() メソッドの手順は次のとおりである:

  1. thisが null ならば、返る。

  2. this除去する

4.2.9. ミックスイン Slottable

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

assignedSlot のgetter手順は、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番目ノードを返さなければならない。コレクション内に 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]
コレクションから、ID または名前が name である最初の要素を返す。

このオブジェクトのサポートされるプロパティインデックスは、 コレクションによって表される要素数より 1 少ない数までの、0 から始まる範囲内の数である。そのような 要素が存在しない場合、サポートされるプロパティインデックスは存在しない。

length の getter 手順は、 コレクションによって表されるノード数を返すことである。

item(index) メソッドの手順は、 コレクション内の index番目要素を返すことである。コレクション内に index番目要素がない場合、このメソッドは null を返さなければならない。

サポートされるプロパティ名は、次の手順によって 返されるリストの値である:

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

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

    1. element が、result 内にないIDを持つ場合、 elementIDresult に追加する。

    2. elementHTML 名前空間内にあり、かつ、空文字列でも result 内にもないを持つ name 属性持つ場合、elementname 属性result に追加する。

  3. result を返す。

namedItem(key) メソッドの手順は次のとおりである:

  1. key が空文字列である場合、null を返す。

  2. 次のうち少なくとも 1 つが true である、コレクション内の最初の要素を返す:

    そのような要素が存在しない場合は null。

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

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

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

ミューテーションオブザーバー・マイクロタスクをキューに入れるには、次のようにする:

  1. surrounding agentmutation observer microtask queued が true なら、何もしないで終了する。

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

  3. microtaskキューイング し、ミューテーションオブザーバーに通知する。

ミューテーションオブザーバーに通知するには、次のようにする:

  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 in notifySet について:

    1. recordsクローンした morecord queue にする。

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

    3. node in monode list について:noderegistered observer list から transient registered observers のうち、 observermo であるものをすべて削除する。

    4. records空でない場合は、コールバック関数を呼び出すmocallback に « records, mo », "report" を渡し、 callback this valuemo に設定して呼び出す。

  7. slot in signalSet について:イベントを発火させる 名前は slotchangebubbles 属性を true に設定し、slot で発火させる。


ノードは、登録済みオブザーバー リスト(0 個以上の登録済みオブザーバーからなるリスト)を持ち、これは初期状態では空である。

登録済み オブザーバーは、 オブザーバーMutationObserver オブジェクト)と、 オプションMutationObserverInit 辞書)からなる。

一時的な 登録済みオブザーバーは、 ソース登録済みオブザーバー)も持つ 登録済み オブザーバーである。

一時的な登録済みオブザーバーは、ある ノードが除去された後も、 その子孫内の変更を追跡するために使用される。これにより、 ノードsubtree が 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 オブジェクトを構築し、そのコールバックcallback に設定する。callback は、第 1 引数として MutationRecord オブジェクトのリストを、第 2 引数として構築された MutationObserver オブジェクトを指定して呼び出される。これは、observe() メソッドによって登録されたノードが 変更された後に呼び出される。
observer . observe(target, options)
指定された targetノード)を監視し、 options(オブジェクト)によって指定された基準に基づいて変更を報告するよう、 ユーザーエージェントに指示する。

options 引数を使用すると、オブジェクトのメンバーを介して変更の 監視オプションを設定できる。使用できるオブジェクトのメンバーは 次のとおりである:

childList
targetに対する変更を 監視する場合は true に設定する。
attributes
target属性に 対する変更を監視する場合は true に設定する。 attributeOldValue または attributeFilter が指定されている場合は、 省略できる。
characterData
targetデータに 対する変更を監視する場合は true に設定する。 characterDataOldValue が指定されている場合は、省略できる。
subtree
target だけでなく、 target子孫に対する変更も 監視する場合は true に設定する。
attributeOldValue
attributes が true または省略されており、 変更前の target属性を記録する必要がある場合は、 true に設定する。
characterDataOldValue
characterData が true に設定されているか省略されており、変更前の targetデータを 記録する必要がある場合は、 true に設定する。
attributeFilter
すべての 属性の 変更を監視する必要がなく、かつ attributes が true または省略されている場合は、属性ローカル名名前空間を 含まない)のリストに設定する。
observer . disconnect()
observer によるすべての変更の監視を停止する。observe() メソッドが再び使用されるまで、observerコールバックは呼び出されない。
observer . takeRecords()
レコード キューを空にし、その中にあったものを返す。

new MutationObserver(callback) コンストラクターの手順は、thisコールバックcallbackに設定することである。

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. target登録済みオブザーバーリスト内の registeredそれぞれ処理し、registeredオブザーバーthisである場合:

    1. thisノードリスト内の各 nodeについて、node登録済みオブザーバーリストから、 ソースregisteredであるすべての一時登録済みオブザーバー除去する

    2. registeredオプションoptionsに設定する。

  8. そうでない場合:

    1. オブザーバーthisであり、オプションoptionsである新しい登録済みオブザーバーを、 target登録済みオブザーバーリスト付加する

    2. targetへの弱参照を、thisノードリスト付加する

disconnect()メソッドの手順は、 次のとおりである:

  1. thisノードリスト内の各 nodeについて、thisオブザーバーであるすべての 登録済みオブザーバーを、node登録済みオブザーバーリストから除去する

  2. thisレコードキュー空にする

takeRecords()メソッドの手順は、 次のとおりである:

  1. recordsを、thisレコードキュー複製とする。

  2. thisレコードキュー空にする

  3. recordsを返す。

4.3.2. ミューテーションレコードのキューイング

ミューテーションレコードをキューに入れるには、typetargetnamenamespaceoldValueaddedNodesremovedNodespreviousSiblingnextSiblingを使って次を行う:

  1. interestedObservers を空のマップとします。

  2. nodestarget包括的祖先とします。

  3. nodes の各 node について、さらに node登録済みオブザーバー リストの各 registered について反復する:

    1. optionsregisteredoptions とします。

    2. 次のいずれも true でない場合

      その場合:

      1. moregisteredobserver とします。

      2. interestedObservers[mo] が存在しない場合、 interestedObservers[mo] を null に設定する

      3. type が "attributes" であり、かつ options["attributeOldValue"] が true であるか、または type が "characterData" であり、かつ options["characterDataOldValue"] が true である場合、interestedObservers[mo] を oldValue設定する

  4. interestedObservers の各 observermappedOldValue について 反復する:

    1. record を、その typetype に設定され、targettarget に設定され、 attributeNamename に設定され、attributeNamespacenamespace に設定され、oldValuemappedOldValue に設定され、 addedNodesaddedNodes に設定され、 removedNodesremovedNodes に設定され、 previousSiblingpreviousSibling に設定され、かつ nextSiblingnextSibling に設定された、新しい MutationRecord オブジェクトとします。

    2. recordobserverレコード キューエンキューする

    3. observer周囲のエージェント保留中のミューテーションオブザーバー付加する

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

ツリーミューテーションレコードをキューに入れるには、targetaddedNodesremovedNodespreviousSiblingnextSibling を使って次を行う:

  1. アサート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 である。

typetargetaddedNodesremovedNodespreviousSiblingnextSiblingattributeNameattributeNamespace、および oldValue 属性は、それらが初期化された値を 返さなければならない。

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 は、すべての ノードによって使用される抽象 インターフェイスである。このインターフェイスの直接のインスタンスを取得することはできない。

ノードには、作成時に 設定される、文書である関連付けられた ノード 文書がある。

ノードノード文書は、 採用アルゴリズムに よって変更できる。

ノード親を取得するアルゴリズムは、 event が与えられたとき、ノード割り当てられている場合は、 ノード割り当てられたスロットを返し、 それ以外の場合は、ノードを返す。

ノードには、登録済みオブザーバーリストもある。

文書 document が与えられたとき、インターフェイス interface を実装するノードを作成するには、次を行う:

  1. 表明interfaceDocument でも、Document を継承するインターフェイスでもない。 文書を作成するには、代わりに 文書を 作成するを使用する。

  2. document関連するレルム内で、 interface実装し、そのノード文書document に設定された新しいノードを返す。


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
そのターゲット
Comment
"#comment"。
Document
"#document"。
DocumentType
その名前
DocumentFragment
"#document-fragment"。

nodeType の取得手順は、this実装するインターフェイスに応じて分岐し、最初に一致する文を返すことである:

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 の取得手順は、this実装するインターフェイスに応じて分岐し、最初に一致する文を返すことである:

Element
そのHTML 大文字化修飾名
Attr
その修飾名
排他的 Text ノード
"#text"。
CDATASection
"#cdata-section"。
ProcessingInstruction
そのターゲット
Comment
"#comment"。
Document
"#document"。
DocumentType
その名前
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 の取得手順は、this実装するインターフェイスに応じて分岐し、次を返すことである:

Attr
this
CharacterData
thisデータ
それ以外
Null。

nodeValue の設定手順は、指定された値が null の場合は代わりに空文字列であるかのように扱い、その後、this実装するインターフェイスに応じて分岐し、以下のように行うことである:

Attr

this と指定された値を使用して、既存の属性値を設定する

CharacterData

thisデータを置換する。0、this長さ、および 指定された値を使用する。

それ以外

何もしない。

ノード node を使用して テキスト内容を取得するには、 node実装するインターフェイスに応じて分岐し、次を返す:

DocumentFragment
Element
node子孫テキスト内容
Attr
node
CharacterData
nodeデータ
それ以外
Null。

textContent の取得手順は、 this を使用してテキスト内容を取得する処理を実行した結果を返すことである。

ノード parent 内で、 文字列 string を使用して文字列ですべて置換するには、次の手順を実行する:

  1. node を null とする。

  2. string が空文字列でない場合は、node を、parentノード文書string を指定してテキスト ノードを作成した結果に設定する。

  3. parent 内のすべてを node置き換える

ノード node と文字列 value を使用してテキスト内容を設定するには、node実装するインターフェイスに応じて分岐し、以下に定義されたとおりに行う:

DocumentFragment
Element

node 内で value を使用して文字列ですべて 置換する

Attr

nodevalue を使用して既存の属性値を設定する

CharacterData

nodeデータを置換する。0、node長さ、および value を使用する。

それ以外

何もしない。

textContent の設定手順は、指定された値が null の場合は代わりに空文字列であるかのように扱い、その後、this と指定された値を使用してテキスト内容を設定する処理を実行することである。


node . normalize()
空の排他的 Text ノードを除去し、残りの連続する排他的 Text ノードデータを、それらの ノードの最初のものに連結する。

normalize() メソッドの手順は、 this の各子孫である排他的 Text ノード node について、次の手順を実行することである:

  1. lengthnode長さとする。

  2. length が 0 の場合は、node除去し、存在する場合は次の排他的 Text ノードへ進む。

  3. data を、node連続する排他的 Text ノード(それ自身を除く)のデータを、ツリー順連結したものとする。

  4. nodeデータを置換するlength、0、および data を使用する。

  5. currentNodenode次の兄弟とする。

  6. 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連続する排他的 Text ノード(それ自身を除く)を、ツリー順除去する


node . cloneNode([subtree = false])
node のコピーを返す。 subtree が true の場合、そのコピーには node子孫も含まれる。
node . isEqualNode(otherNode)
nodeotherNode が 同じプロパティを持つかどうかを返す。
仕様は、すべてまたは一部のノードについて 複製手順を定義しても よい。ノードを複製するアルゴリズムで示されるとおり、このアルゴリズムには nodecopy、および subtree が渡される。

HTML は、 inputscript、 および template など、いくつかの要素について複製手順を定義している。 SVG も、その script 要素について同様に定義すべきであるが、定義していない。

ノード node、省略可能な文書 document (既定値は nodeノード文書)、ブール値 subtree(既定値は false)、ノードまたは null の parent(既定値は null)、および null または CustomElementRegistry オブジェクト fallbackRegistry (既定値は null)が与えられたとき、ノードを複製するには、次を行う:

  1. 表明node文書ではないか、または nodedocument である。

  2. copy を、nodedocument、および fallbackRegistry を指定して単一のノードを複製した結果とする。

  3. その他の適用可能な仕様node について定義された複製手順を実行し、nodecopy、および subtree を引数として渡す。

  4. parent が null でない場合は、copyparent付加する

  5. subtree が true の場合は、nodeの各 child について、ツリー順に、child を指定してノードを複製する。その際、 documentdocument に、 subtreesubtree に、 parentcopy に、 fallbackRegistryfallbackRegistry に設定する。

  6. node要素であり、nodeシャドウ ホストであり、かつ nodeシャドウルート複製可能が true の場合:

    1. 表明copyシャドウホストではない。

    2. shadowRootRegistrynodeシャドウ ルートカスタム要素レジストリとする。

    3. shadowRootRegistryグローバルカスタム要素 レジストリである場合、shadowRootRegistrydocumentカスタム要素レジストリ有効なグローバルカスタム 要素レジストリに設定する。

    4. シャドウルートをアタッチするcopynodeシャドウルートmodenodeシャドウルートdelegates focusnodeシャドウルートserializablenodeシャドウルートslot assignment、true、および shadowRootRegistry を使用して実行する。

    5. copyシャドウルート宣言的を、nodeシャドウルート宣言的に設定する。

    6. copyシャドウルートカスタム要素レジストリを null のままにするを、nodeシャドウルートカスタム要素レジストリを null のままにするに設定する。

    7. nodeシャドウルートの各 child について、ツリー順に、child を指定してノードを複製する。その際、 documentdocument に、 subtree を true に、 parentcopyシャドウルートに設定する。

      これは意図的に fallbackRegistry 引数を 渡さない。

  7. copy を返す。

ノード node文書 document、および null または CustomElementRegistry オブジェクト fallbackRegistry が与えられたとき、単一の ノードを複製するには、次を行う:

  1. copy を null とする。

  2. node要素である場合:

    1. registrynodeカスタム要素レジストリとする。

    2. registry が null の場合は、registryfallbackRegistry に設定する。

    3. registryグローバルカスタム要素 レジストリである場合、registrydocumentカスタム要素レジストリ有効なグローバルカスタム 要素レジストリに設定する。

    4. copy を、documentnodeローカル 名node名前空間node名前空間接頭辞nodeis、false、および registry を指定して要素を 作成した結果に設定する。

    5. node属性リストの各 attribute について反復する

      1. copyAttribute を、attributedocument、 および null を指定して単一のノードを複製した結果とする。

      2. copyAttributecopy付加する

  3. それ以外で、node文書である場合は、copy を、 document関連するレルムを指定して、node と同じ インターフェイスを実装する文書を 作成した結果に設定する。

  4. それ以外の場合は、copy を、document を指定して、 node と同じインターフェイスを実装するノードを作成した結果に設定する。

  5. node実装するインターフェイスに応じて分岐し、次の追加要件を満たす:

    Document
    1. copyエンコーディングコンテンツ型URLオリジンモード、および宣言的シャドウ ルートを許可するを、node のそれぞれの値に設定する。

    2. nodeカスタム要素レジストリスコープ付きであるが true の場合は、 copyカスタム要素レジストリnodeカスタム要素レジストリに 設定する。

    DocumentType

    copy名前公開 ID、および システム IDを、node のそれぞれの 値に設定する。

    Attr

    copy名前空間名前空間接頭辞ローカル名、およびを、node のそれぞれの値に 設定する。

    Text
    Comment

    copyデータnode のデータに設定する。

    ProcessingInstruction

    copyターゲットデータ を、node のそれぞれの値に設定する。

    それ以外

    何もしない。

  6. 表明copyノードである。

  7. node文書である場合は、documentcopy に設定する。

  8. copyノード文書document に設定する。

  9. copy を返す。

cloneNode(subtree) メソッドの手順は 次のとおりである:

  1. thisシャドウルートである場合は、 "NotSupportedError" DOMExceptionスローする

  2. this を指定してノードを複製した結果を返す。その際、 subtreesubtree に設定する。

次の条件がすべて true である場合、ノード Aノード B等しい

isEqualNode(otherNode) メソッドの手順は、 otherNode が null でなく、かつthisotherNode等しい場合は true を返し、 それ以外の場合は false を返すことである。

isSameNode(otherNode) メソッドの手順は、 otherNodethis である場合は true を返し、それ以外の場合は false を返すことである。


node . compareDocumentPosition(other)
node に対する other の位置を示すビットマスクを返す。設定できるビットは 次のとおりである:
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、16 進数では 10)
othernode子孫である場合に設定される。
node . contains(other)
othernode包括的子孫である場合は true を返し、 それ以外の場合は false を返す。

compareDocumentPosition() がマスクとして返す定数は次のとおりである:

compareDocumentPosition(other) メソッドの 手順は次のとおりである:

  1. thisother である場合は、0 を返す。

  2. node1other とし、node2this とする。

  3. attr1attr2 を null とする。

  4. node1属性である場合、attr1node1 に、 node1attr1要素に設定する。

  5. node2属性である場合:

    1. attr2node2 に設定し、node2attr2要素に設定する。

    2. attr1node1 が null でなく、かつ node2node1 である場合:

      1. node2属性リストの各 attr について反復する

        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 のいずれかを、一貫性が保たれるという制約の下で加算した結果を返す。

    DOCUMENT_POSITION_PRECEDINGDOCUMENT_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) メソッドの手順は、 otherthis包括的子孫である場合は true を返し、 それ以外の場合は false を返すことである(other が null の場合を含む)。


namespace を使用して element名前空間接頭辞を特定するには、次の手順を実行する:

  1. element名前空間namespace であり、その 名前空間接頭辞が null でない場合は、その 名前空間接頭辞を返す。

  2. element が、名前空間接頭辞が "xmlns" であり、namespace である属性持つ場合は、element のそのような 最初の属性ローカル名を返す。

  3. element親要素が null でない場合は、namespace を使用してその 要素に対して名前空間接頭辞を特定する処理を実行した結果を返す。

  4. null を返す。

prefix を使用して node名前空間を特定するには、node実装するインターフェイスに応じて分岐する:

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. this実装するインターフェイスに応じて分岐する:

    Element

    namespace を使用してthis名前空間接頭辞を特定した結果を返す。

    Document
    1. this文書要素が null の場合は、null を返す。

    2. namespace を使用してthis文書要素名前空間接頭辞を特定した結果を返す。

    DocumentType
    DocumentFragment

    null を返す。

    Attr
    1. this要素が null の場合は、null を返す。

    2. namespace を使用してthis要素名前空間接頭辞を特定した結果を返す。

    それ以外
    1. this親要素が null の場合は、null を返す。

    2. namespace を使用してthis親要素名前空間接頭辞を特定した結果を返す。

lookupNamespaceURI(prefix) メソッドの 手順は次のとおりである:

  1. prefix が空文字列の場合は、それを null に設定する。

  2. prefix を使用してthis名前空間を特定する処理を実行した結果を返す。

isDefaultNamespace(namespace) メソッドの 手順は次のとおりである:

  1. namespace が空文字列の場合は、それを null に設定する。

  2. defaultNamespace を、null を使用して this名前空間を特定する処理を実行した 結果とする。

  3. defaultNamespacenamespace と同じ場合は true を返し、それ以外の場合は false を返す。


insertBefore(node, child) メソッドの手順は、nodechild の前のthis 内へ事前挿入した結果を返すことである。

appendChild(node) メソッドの手順は、 nodethis付加した結果を返すことである。

replaceChild(node, child) メソッドの手順は、this 内で childnode置き換えた結果を返すことである。

removeChild(child) メソッドの手順は、 this から child事前除去した結果を返すことである。


ノード root修飾名 qualifiedName を持つ要素のリストは、次の アルゴリズムによって返される HTMLCollection である:

  1. qualifiedName が U+002A (*) の場合は、root をルートとし、フィルターが 子孫要素のみに一致する HTMLCollection を返す。

  2. それ以外で、rootノード文書HTML 文書である場合は、 root をルートとし、フィルターが次の 子孫要素に一致する HTMLCollection を返す:

  3. それ以外の場合は、root をルートとし、フィルターが、修飾名qualifiedName である子孫要素に一致する HTMLCollection を返す。

同じ引数で呼び出され、かつ rootノード 文書が変更されていない限り、以前の呼び出しで返されたものと 同じ HTMLCollection オブジェクトを返してもよい。

ノード root名前空間 namespace とローカル名 localName を持つ要素のリストは、次のアルゴリズムによって返される HTMLCollection である:

  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 オブジェクトを返してもよい。

ノード rootクラス名 classNames を持つ要素のリストは、次の アルゴリズムによって返される HTMLCollection である:

  1. classes を、classNames に対して 順序付き集合パーサーを実行した結果とする。
  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")、 宣言的シャドウルートを許可する(ブール値)、および カスタム要素レジストリ(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" である場合、 非互換モードなし モードにあるといい、そのモードが "quirks" である場合、 互換モードに あるといい、その モードが "limited-quirks" である場合、 限定互換 モードにあるという。

モードが 既定値から変更されるのは、DOCTYPE 文字列の有無または値に基づいて HTML パーサーによって作成された文書、および新しい 閲覧コンテキスト(初期 "about:blank")に 限られる。[HTML]

非互換モードなしモードは、当初 「標準モード」と呼ばれ、限定互換モードは、かつて 「ほぼ標準モード」と呼ばれていた。現在ではその詳細が標準によって定義されているため、 名前が変更された。(また、Ian Hickson が、それらの元の名称は無意味であるという理由で 拒否したためでもある。)

文書親を取得する アルゴリズムは、event が与えられたとき、eventtype 属性値が "load" である場合、または 文書閲覧コンテキストを持たない場合は null を返し、 それ以外の場合は、文書関連するグローバルオブジェクトを返す。

レルム realm が与えられたとき、インターフェイス interface を実装する 文書を 作成するには、次を行う:

  1. 表明interfaceDocument または Document を継承するインターフェイスである。

  2. realm 内で interface実装する新しいノードを返す。


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" を返すことである。

characterSetcharset、および inputEncoding の取得手順は、 thisエンコーディング名前を返すことである。

contentType の取得手順は、 thisコンテンツ型を返すことである。


document . 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のうち、 文書型であるものを返し、それ以外の場合は null を返すことである。

documentElement の取得手順は、 this文書要素を返すことである。

getElementsByTagName(qualifiedName) メソッドの手順は、this修飾名 qualifiedName を持つ要素のリストを 返すことである。

したがって、HTML 文書内では、 document.getElementsByTagName("FOO") は、HTML 名前空間にない <FOO> 要素、および HTML 名前空間にある <foo> 要素には一致するが、 HTML 名前空間にある <FOO> 要素には一致しない。

getElementsByTagNameNS(namespace, localName) メソッドの手順は、this名前空間 namespace とローカル名 localName を持つ要素のリストを返すことである。

getElementsByClassName(classNames) メソッドの手順は、thisクラス名 classNames を持つ要素のリストを 返すことである。

次の 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") を呼び出すと、2 つの段落 p1p2 を含む HTMLCollection が返される。

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 である。

options が指定された場合、その customElementRegistry を使用して CustomElementRegistry を設定できる。

options が指定された場合、その is を使用してカスタマイズされた組み込み要素を作成できる。

localName妥当な要素ローカル名でない場合、 "InvalidCharacterError" DOMException がスローされる。

optionscustomElementRegistryoptionsis の両方が指定された場合、 "NotSupportedError" DOMException がスローされる。

element = document . createElementNS(namespace, qualifiedName [, options])

名前空間 namespace を持つ 要素を返す。その 名前空間接頭辞は、 qualifiedName 内の U+003A (:) より前のすべて、または null となる。その ローカル名は、 qualifiedName 内の U+003A (:) より後のすべて、または qualifiedName となる。

options が指定された場合、その customElementRegistry を使用して CustomElementRegistry を設定できる。

options が指定された場合、その is を使用してカスタマイズされた組み込み要素を作成できる。

qualifiedName が(接頭辞を持つ可能性のある) 妥当な要素ローカル名でない場合、 "InvalidCharacterError" DOMException がスローされる。

次のいずれかの条件が true の場合、 "NamespaceError" DOMException がスローされる:

optionscustomElementRegistryoptionsis の両方が指定された場合、 "NotSupportedError" DOMException がスローされる。

documentFragment = document . createDocumentFragment()
DocumentFragment ノードを返す。
text = document . createTextNode(data)
データdata である Text ノードを返す。
text = document . createCDATASection(data)
データdata である CDATASection ノードを返す。
comment = document . createComment(data)
データdata である Comment ノードを返す。
processingInstruction = document . createProcessingInstruction(target, data)
ターゲットtarget であり、 データdata である ProcessingInstruction ノードを返す。 targetName 生成規則に一致しない場合、 "InvalidCharacterError" DOMException がスローされる。 data に "?>" が含まれる場合、 "InvalidCharacterError" DOMException がスローされる。

任意の namenamespace に対する 要素 インターフェイスは、別段の記載がない限り Element である。

たとえば HTML 標準は、htmlHTML 名前空間に対して、HTMLHtmlElement インターフェイスが使用されることを定義する。[HTML]

createElement(localName, options) メソッドの手順は次のとおりである:

  1. localName妥当な要素ローカル名でない場合は、 "InvalidCharacterError" DOMExceptionスローする

  2. thisHTML 文書である場合は、localNameASCII 小文字に変換した localName に設定する。

  3. registryis を、optionsthis を指定して要素作成オプションを平坦化した結果とする。

  4. thisHTML 文書である場合、または thisコンテンツ型が "application/xhtml+xml" である場合は、namespaceHTML 名前空間とし、それ以外の場合は null とする。

  5. thislocalNamenamespace、null、is、true、および registry を指定して 要素を作成した結果を返す。

documentnamespacequalifiedName、および options が与えられたとき、 内部 createElementNS 手順は次のとおりである:

  1. (namespace, prefix, localName) を、 "element" を指定して namespacequalifiedName検証して抽出した結果とする。

  2. registryis を、optionsthis を指定して要素作成オプションを平坦化した結果とする。

  3. documentlocalNamenamespaceprefixis、true、および registry を指定して 要素を作成した結果を返す。

createElementNS(namespace, qualifiedName, options) メソッドの手順は、thisnamespacequalifiedName、および options を指定して 内部 createElementNS 手順を 実行した結果を返すことである。

文字列または ElementCreationOptions 辞書 options文書 document が与えられたとき、 要素作成オプションを平坦化するには、次を行う:

  1. registry を、document を指定してカスタム要素レジストリを検索した結果とする。

  2. is を null とする。

  3. options が辞書である場合:

    1. options["is"] が存在する場合は、is をそれに設定する。

    2. options["customElementRegistry"] が存在する場合:

      1. is が null でない場合は、 "NotSupportedError" DOMExceptionスローする

      2. registryoptions["customElementRegistry"] に設定する。

    3. registry が null でなく、registryスコープ付きであるが false であり、かつ registrydocumentカスタム要素レジストリでない場合は、 "NotSupportedError" DOMExceptionスローする

  4. registryis を返す。

createElement() および createElementNS()options 引数には、ウェブ互換性のため文字列を使用することが許可されている。

createDocumentFragment() メソッドの 手順は、this を指定して文書フラグメントを作成した結果を返すことである。

createTextNode(data) メソッドの 手順は、thisdata を指定してテキストノードを作成した結果を返すことである。

createCDATASection(data) メソッドの 手順は次のとおりである:

  1. thisHTML 文書である場合は、 "NotSupportedError" DOMExceptionスローする

  2. data に文字列 "]]>" が含まれる場合は、 "InvalidCharacterError" DOMExceptionスローする

  3. node を、this を指定して CDATASection を実装するノードを作成した結果とする。

  4. nodeデータdata に設定する。

  5. node を返す。

createComment(data) メソッドの手順は、 thisdata を指定してコメントノードを作成した結果を 返すことである。

createProcessingInstruction(target, data) メソッドの手順は、thistarget、および data を指定して処理命令ノードを作成した結果を返すことである。


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" DOMExceptionスローする

  2. subtree を false とする。

  3. registry を null とする。

  4. options がブール値である場合は、subtreeoptions に設定する。

  5. それ以外の場合:

    1. subtreeoptions["selfOnly"] の否定に設定する。

    2. options["customElementRegistry"] が存在する場合は、registry をそれに設定する。

    3. registryスコープ付きであるが false であり、かつ registrythisカスタム要素レジストリでない場合は、 "NotSupportedError" DOMExceptionスローする

  6. registry が null の場合は、this を指定してカスタム要素レジストリを検索した結果に registry を設定する。

  7. node を指定してノードを複製した結果を返す。その際、 documentthis に、 subtreesubtree に、 fallbackRegistryregistry に設定する。

仕様は、すべてまたは一部のノードについて 採用手順を定義してもよい。 採用アルゴリズムで示されるとおり、このアルゴリズムには nodeoldDocument が渡される。

ノード node文書 document採用するには、次を行う:

  1. oldDocumentnodeノード文書とする。

  2. nodeが null でない場合は、node除去する

  3. documentoldDocument でない場合は、nodeシャドウを含む包括的子孫の 各 inclusiveDescendant について、シャドウを含むツリー順に:

    1. inclusiveDescendantノード文書document に設定する。

    2. inclusiveDescendantシャドウルートであり、かつ次のいずれかが true である場合:

      その場合は、inclusiveDescendantカスタム要素レジストリを、 documentカスタム要素レジストリ有効なグローバルカスタム要素 レジストリに設定する。

    3. それ以外で、inclusiveDescendant要素である場合:

      1. inclusiveDescendant属性リスト内の各 属性ノード文書document に設定する。

      2. inclusiveDescendantカスタム要素レジストリが null であるか、または inclusiveDescendantカスタム要素レジストリスコープ付きであるが false である場合:

        1. registry を null とする。

        2. inclusiveDescendantカスタム要素 レジストリが null でなく、 inclusiveDescendantが null であるか、 または inclusiveDescendant排他的 DocumentFragment ノードである場合は、 registrydocumentカスタム要素 レジストリに設定する。

        3. それ以外の場合は、inclusiveDescendantを指定して カスタム要素 レジストリを検索した結果に registry を設定する。

        4. inclusiveDescendantカスタム要素 レジストリを、registry有効な グローバルカスタム要素レジストリに設定する。

      3. inclusiveDescendantカスタムである場合は、 inclusiveDescendant、コールバック名 "adoptedCallback"、および « oldDocument, document » を指定してカスタム要素 コールバックリアクションをキューに入れる

    4. inclusiveDescendantoldDocument を使用して 採用手順を実行する。

adoptNode(node) メソッドの手順は 次のとおりである:

  1. node文書である場合は、 "NotSupportedError" DOMExceptionスローする

  2. nodeシャドウルートである場合は、 "HierarchyRequestError" DOMExceptionスローする

  3. nodethis採用する

  4. node を返す。


null または CustomElementRegistry オブジェクト registry は、registry が null でなく、かつ registryスコープ付きであるが false である場合、 グローバルカスタム要素レジストリである

null または CustomElementRegistry オブジェクト registry有効なグローバルカスタム要素レジストリは 次のとおりである:

  1. registryグローバルカスタム要素レジストリである 場合は、registry を返す。

  2. null を返す。


createAttribute(localName) メソッドの 手順は次のとおりである:

  1. localName妥当な属性ローカル名でない場合は、 "InvalidCharacterError" DOMExceptionスローする

  2. thisHTML 文書である場合は、localNameASCII 小文字に変換した localName に設定する。
  3. thislocalName を指定して 属性を作成した結果を返す。

createAttributeNS(namespace, qualifiedName) メソッドの手順は次のとおりである:

  1. (namespace, prefix, localName) を、 "attribute" を指定して namespacequalifiedName検証して抽出した結果とする。

  2. thislocalNamenamespace、および prefix を指定して属性を作成した結果を返す。


createEvent(interface) メソッドの 手順は次のとおりである:

  1. constructor を null とする。

  2. interface が、次の表の第 1 列にあるいずれかの文字列と ASCII 大文字・小文字を区別せず一致する場合は、 constructor を、一致した文字列と同じ行の第 2 列にあるインターフェイスに設定する:

    文字列 インターフェイス 注記
    "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" DOMExceptionスローする

  4. constructor が示すインターフェイスが、this関連するグローバルオブジェクトで公開されていない 場合は、 "NotSupportedError" DOMExceptionスローする

    通常、ユーザーエージェントは一部の構成でタッチイベントの サポートを無効にする。その場合、この規定は TouchEvent インターフェイスに対して適用される。

  5. event を、constructor を指定してイベントを作成した結果とする。

  6. eventtype 属性を空文字列に初期化する。

  7. eventtimeStamp 属性を、this関連するグローバルオブジェクトを使用して 現在の高分解能時刻を呼び出した結果に 初期化する。

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

  9. event初期化済みフラグを解除する。

  10. event を返す。

代わりにイベントコンストラクターを使用すべきである。


createRange() メソッドの手順は、 (this, 0) をその開始および終了として持つ新しいライブ範囲を返すことである。

代わりに Range() コンストラクターを使用できる。


createNodeIterator(root, whatToShow, filter) メソッドの手順は次のとおりである:

  1. iterator を新しい NodeIterator オブジェクトとする。

  2. iteratorルートroot に設定する。

  3. iterator参照を (root, true) に設定する。

  4. iteratorwhatToShowwhatToShow に設定する。

  5. iteratorフィルターfilter に設定する。

  6. iterator を返す。

createTreeWalker(root, whatToShow, filter) メソッドの手順は次のとおりである:

  1. walker を新しい TreeWalker オブジェクトとする。

  2. walkerルートwalker現在位置root に設定する。

  3. walkerwhatToShowwhatToShow に設定する。

  4. walkerフィルターfilter に設定する。

  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(); // historical; always returns true
};
doctype = document . implementation . createDocumentType(name, publicId, systemId)
指定された namepublicId、および systemId を持つ 文書型を返す。

name妥当な文書型名でない場合、 "InvalidCharacterError" DOMException がスローされる。

doc = document . implementation . createDocument(namespace, qualifiedName [, doctype = null])
文書要素を持つ XMLDocument を返す。その文書要素の ローカル名qualifiedName であり、 名前空間namespace である(qualifiedName が 空文字列である場合を除く)。また、doctype が指定されている場合は、それを 文書型として持つ。

このメソッドは、namespacequalifiedName を指定して呼び出された createElementNS() メソッドと同じ例外をスローする。

doc = document . implementation . createHTMLDocument([title])
title 引数が省略されていない限り、 title 要素を含む基本的な ツリーが あらかじめ構築された文書を返す。

createDocumentType(name, publicId, systemId) メソッドの手順は次のとおりである:

  1. name妥当な文書型名でない場合は、 "InvalidCharacterError" DOMException をスローする。

  2. this に関連付けられた文書namepublicId、および systemId を指定して 文書型を作成した結果を返す。

createDocument(namespace, qualifiedName, doctype) メソッドの手順は次のとおりである:

  1. document を、this関連するレルムを指定して、XMLDocument を実装する文書を作成した結果とする。

  2. element を null とする。

  3. qualifiedName が空文字列でない場合は、 documentnamespacequalifiedName、および空の辞書を指定して 内部 createElementNS 手順を 実行した結果に element を設定する。

  4. doctype が null でない場合は、doctypedocument付加する

  5. element が null でない場合は、elementdocument付加する

  6. documentオリジンを、this に関連付けられた 文書オリジンに設定する。

  7. documentコンテンツ型namespace によって決定される:

    HTML 名前空間
    application/xhtml+xml
    SVG 名前空間
    image/svg+xml
    その他の名前空間
    application/xml
  8. document を返す。

createHTMLDocument(title) メソッドの手順は次のとおりである:

  1. doc を、this関連するレルムを指定して、Document を実装する文書を作成した結果とする。

  2. docを "html" に設定し、 コンテンツ型を "text/html" に設定する。

  3. doctype を、doc と "html" を指定して 文書型を作成した結果とする。

  4. doctypedoc付加する

  5. doc、"html"、およびHTML 名前空間を指定して 要素を作成した結果を doc付加する

  6. doc、"head"、およびHTML 名前空間を指定して 要素を作成した結果を、先に作成した html 要素に付加する

  7. title が指定されている場合:

    1. doc、"title"、およびHTML 名前空間を指定して 要素を作成した結果を、先に作成した head 要素に付加する

    2. text を、doctitle(空文字列である可能性がある)を 指定してテキストノードを作成した結果とする。

    3. text を、先に作成した title 要素に付加する

  8. doc、"body"、およびHTML 名前空間を指定して 要素を作成した結果を、先に作成した html 要素に付加する

  9. docオリジンを、this に関連付けられた 文書オリジンに設定する。

  10. 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 ノードは、単に 文書型と呼ばれる。

文書型には、関連付けられた 名前(文字列)、 公開 ID(文字列)、および システム ID(文字列)がある。

文書 document、文字列 name、および省略可能な文字列 publicId(既定値は空文字列)と文字列 systemId(既定値は空文字列)が与えられたとき、文書型を作成するには、次を行う:

  1. doctype を、document を指定して DocumentType を実装するノードを作成した結果とする。

  2. doctype名前name に、公開 IDpublicId に、システム IDsystemId に設定する。

  3. doctype を返す。

name の取得手順は、 this名前を返すことである。

publicId の取得手順は、 this公開 IDを返すことである。

systemId の取得手順は、 thisシステム IDを返すことである。

4.7. インターフェイス DocumentFragment

[Exposed=Window]
interface DocumentFragment : Node {
  constructor();
};
tree = new DocumentFragment()
新しい DocumentFragment ノードを返す。

排他的 DocumentFragment ノードとは、ShadowRoot ノードではない DocumentFragment ノードである。

DocumentFragment ノードには、関連付けられた ホスト(null、または異なるノードツリー内の 要素)がある。別段の 記載がない限り、これは null である。

オブジェクト A がオブジェクト Bホストを含む包括的祖先であるのは、 AB包括的 祖先である場合、または Bルートが null でないホストを 持ち、かつ ABルートホストホストを含む包括的祖先である場合である。

DocumentFragment ノードホストの 概念は、HTML の template 要素およびシャドウルートに有用であり、 事前挿入 および置換 アルゴリズムに影響する。

文書 document が与えられたとき、文書フラグメントを作成するには、document を 指定して DocumentFragment を実装するノードを作成した結果を返す。

new DocumentFragment() コンストラクターの手順は、thisノード文書を、 現在のグローバルオブジェクト関連付けられた Documentに設定することである。

4.8. インターフェイス ShadowRoot

[Exposed=Window]
interface ShadowRoot : DocumentFragment {
  readonly attribute ShadowRootMode mode;
  readonly attribute boolean delegatesFocus;
  readonly attribute boolean serializable;
  readonly attribute SlotAssignmentMode slotAssignment;
  readonly attribute boolean clonable;
  readonly attribute Element host;

  attribute EventHandler onslotchange;
};

enum ShadowRootMode { "open", "closed" };
enum SlotAssignmentMode { "manual", "named" };

ShadowRoot ノードは、単に シャドウルートと呼ばれる。

シャドウルートに 関連付けられたホストは、決して null ではない。

シャドウルートには、 関連付けられたモード("open" または "closed")がある。

シャドウルートには、 関連付けられたフォーカスを委譲する (ブール値)がある。これは初期状態では false に設定される。

シャドウルートには、 関連付けられた 要素内部で利用可能(ブール値)がある。これは 初期状態では false に設定される。

シャドウルートには、 関連付けられた宣言的 (ブール値)がある。これは初期状態では false に設定される。

シャドウルートには、 関連付けられた serializable(真偽値)がある。 初期状態では false に設定される。

シャドウルートには、 関連付けられた slot assignment ("manual" または "named")がある。

シャドウルートには、 関連付けられた clonable(真偽値)がある。 初期状態では false に設定される。

シャドウルートには、 関連付けられたカスタム要素レジストリ (null または CustomElementRegistry オブジェクト)がある。これは初期状態では null である。

シャドウルートには、 関連付けられた カスタム要素レジストリを null のままにする (ブール値)がある。 これは初期状態では false である。

これが true になり得るのは、宣言的シャドウルートと組み合わせた場合のみである。 また、シャドウルートカスタム 要素レジストリが null である間に限り意味を持つ。


シャドウルート親を取得するアルゴリズムは、 event が与えられたとき、 eventcomposed フラグが設定されておらず、かつシャドウルートeventパスの最初のイベントパス項目呼び出し対象ルートである場合は null を返し、 それ以外の場合はシャドウルートホストを返す。


mode の取得手順は、 thisモードを返すことである。

delegatesFocus の取得手順は、 thisフォーカスを委譲するを返すことである。

serializable getter steps は thisserializable を返すことである。

slotAssignment getter steps は thisslot assignment を返すことである。

clonable getter steps は thisclonable を返すことである。

host の取得手順は、 thisホストを返すことである。


onslotchange 属性は、 onslotchange イベントハンドラーのためのイベントハンドラー IDL 属性であり、その イベントハンドラーイベント型slotchange である。


シャドウを含むツリー順とは、 シャドウを含む前順深さ優先走査による ノードツリーの順序である。 ノードツリー treeシャドウを含む前順深さ優先走査とは、 tree の前順深さ優先走査であり、tree 内で検出された各 シャドウホスト について、その検出直後に、その要素シャドウルートノードツリーシャドウを含む前順深さ優先走査を 行うものである。

オブジェクトのシャドウを含むルートは、そのオブジェクトの ルートシャドウルートである場合、その ルートホストシャドウを含む ルートであり、それ以外の場合はその ルートである。

オブジェクト A がオブジェクト Bシャドウを含む子孫であるのは、 AB子孫である場合、または Aルートシャドウルートであり、かつ AルートホストBシャドウを含む包括的子孫である場合である。

シャドウを含む包括的子孫とは、 あるオブジェクト自身、またはそのシャドウを含む子孫のいずれかである。

オブジェクト A がオブジェクト Bシャドウを含む祖先であるのは、 BAシャドウを含む子孫である場合、かつその場合に 限る。

シャドウを含む包括的祖先とは、 あるオブジェクト自身、またはそのシャドウを含む祖先のいずれかである。

ノード A は、 次のすべての条件が true である場合、ノード B から閉じたシャドウによって隠されている

オブジェクト A をオブジェクト B に対して再ターゲットするには、 オブジェクトが返されるまで次の手順を繰り返す:

  1. 次のいずれかが true の場合

    その場合、A を返す。

  2. A を、Aルートホストに設定する。

再ターゲット アルゴリズムは、イベントのディスパッチだけでなく、 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, (TrustedType or DOMString) value);
  [CEReactions] undefined setAttributeNS(DOMString? namespace, DOMString qualifiedName, (TrustedType or 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;
  boolean serializable = false;
  SlotAssignmentMode slotAssignment = "named";
  boolean clonable = false;
  CustomElementRegistry? customElementRegistry;
};

ShadowRootInit はやや異例として、その customElementRegistry メンバーに undefinednull の両方を渡せるようにしている。これは、ウェブ開発者が attachShadow() に辞書の代わりに ShadowRoot ノードを渡せるようにするためである。

Element ノードは、単に 要素と呼ばれる。

要素には、次のものが 関連付けられている:

名前空間
Null または空でない文字列。
名前空間接頭辞
Null または空でない文字列。
ローカル名
空でない文字列。
カスタム要素レジストリ
Null または CustomElementRegistry オブジェクト。
カスタム要素状態
"undefined"、"failed"、"uncustomized"、 "precustomized"、または "custom"。
カスタム要素定義
Null またはカスタム要素定義
is
Null または有効なカスタム要素名

要素作成される とき、これらすべての値が 初期化される。

要素カスタム要素状態が "uncustomized" または "custom" である場合、その要素は 定義済みであるという。要素カスタム要素状態が "custom" で ある場合、その要素は カスタムであるという。

要素が定義済みであるかどうかは、 :defined 擬似クラスの動作を決定するために使用される。要素がカスタムであるかどうかは、 変更アルゴリズムの動作を決定するために使用される。 "failed" 状態と "precustomized" 状態は、カスタム要素コンストラクターが最初に正しく実行されなかった 場合に、アップグレードによって再び実行されないことを保証するために 使用される。

次のコードは、これら 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() を省略している
    }
  })
</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 でない場合である。

要素修飾名は、その ローカル 名である。ただし、その名前空間接頭辞が null でない場合は、その 名前空間接頭辞、それに続く ":"、 さらにそれに続く ローカル 名である。

要素HTML 大文字化修飾名は、次の手順の返値である:

  1. qualifiedName を、this修飾名とする。

  2. thisHTML 名前空間にあり、そのノード文書HTML 文書で ある場合は、qualifiedNameASCII 大文字に変換して返す。

  3. qualifiedName を返す。

ユーザーエージェントは、修飾名HTML 大文字化修飾名を内部スロットに 格納することで最適化できる。

文書 document、文字列 localName、文字列または null の namespace、および省略可能な文字列または null の prefix(既定値は null)、 文字列または null の is(既定値は null)、ブール値 synchronousCustomElements(既定値は false)、ならびに "default"、 null、または CustomElementRegistry オブジェクト registry(既定値は "default")が与えられたとき、 要素を 作成するには:

  1. result を null とする。

  2. registry が "default" である場合は、 document を指定してカスタム要素レジストリを検索した 結果に registry を設定する。

  3. definition を、 registrynamespacelocalName、および is を指定して カスタム要素定義を検索した結果とする。

  4. definition が null でなく、かつ definition名前がその ローカル名と等しくない場合 (すなわち、definitionカスタマイズされた組み込み要素を表す場合):

    1. interface を、localNameHTML 名前空間に対する要素インターフェイスとする。

    2. result を、documentinterfacelocalNameHTML 名前空間prefix、"undefined"、is、および registry を指定して要素を 内部的に作成した結果に設定する。

    3. synchronousCustomElements が true の場合は、例外を捕捉しながら次の 手順を実行する:

      1. definition を使用して resultアップグレードする

      この手順が例外 exception をスローした場合:

      1. definitionコンストラクター に対応する JavaScript オブジェクトの 関連付けられたレルムグローバルオブジェクトについて、 exception報告する

      2. resultカスタム要素状態を "failed" に設定する。

    4. それ以外の場合は、resultdefinition を指定してカスタム要素アップグレード リアクションをキューに入れる

  5. それ以外で、definition が null でない場合:

    1. synchronousCustomElements が true の場合:

      1. C を、definitionコンストラクター とする。

      2. previousRegistry を、周囲のエージェントアクティブなカスタム要素 コンストラクターマップ[C] の値とし、値がない場合の 既定値は null とする。

      3. 周囲のエージェントアクティブなカスタム要素 コンストラクターマップ[C] を registry設定する

      4. 例外を捕捉しながら次の手順を実行する:

        1. result を、引数なしで C構築した結果に 設定する。

        2. 表明:次のいずれかが true である:

          customElements.define("x-example", class extends HTMLElement {
            constructor() {
              // 不適合:super() を呼び出す代わりに既存の要素を返す。
              return document.createElement("p");
            }
          });
          
          document.createElement("x-example");
          

          ここで resultp 要素であり、その カスタム 要素状態は "uncustomized" で、その カスタム 要素定義は null である。

        3. 表明: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. definitionコンストラクター に対応する JavaScript オブジェクトの関連付けられたレルムグローバルオブジェクトについて、 exception報告する

        2. result を、documentHTMLUnknownElementlocalNameHTML 名前空間prefix、"failed"、null、および registry を指定して要素を内部的に作成した 結果に設定する。

      5. previousRegistry が null の場合は、 周囲のエージェントアクティブなカスタム要素 コンストラクターマップ[C] を除去する

      6. それ以外の場合は、周囲のエージェントアクティブなカスタム要素 コンストラクターマップ[C] を previousRegistry設定する

    2. それ以外の場合:

      1. result を、 documentHTMLElementlocalNameHTML 名前空間prefix、"undefined"、null、および registry を指定して要素を内部的に作成した結果に 設定する。

      2. resultdefinition を指定して カスタム要素 アップグレードリアクションをキューに入れる

  6. それ以外の場合:

    1. interface を、localNamenamespace に対する要素インターフェイスとする。

    2. result を、documentinterfacelocalNamenamespaceprefix、"uncustomized"、is、および registry を指定して要素を 内部的に作成した結果に設定する。

    3. namespaceHTML 名前空間であり、かつ localName有効なカスタム要素名であるか、 または is が null でない場合は、resultカスタム要素状態を "undefined" に設定する。

  7. result を返す。

文書 document、インターフェイス interface、文字列 localName、文字列または null の namespace、文字列または null の prefix、文字列 state、文字列または null の is、および null または CustomElementRegistry オブジェクト registry が与えられたとき、要素を内部的に 作成するには:

  1. element を、document を指定して interface を実装するノードを作成した結果とする。

  2. element名前空間namespace に、 名前空間接頭辞prefix に、ローカル名localName に、カスタム要素レジストリregistry に、 カスタム要素状態state に、 カスタム要素定義を null に、さらにisis に設定する。

  3. 表明element属性リスト空である

  4. element を返す。

要素には、さらに 属性リストがある。これは NamedNodeMap を通じて公開される リストである。 要素の作成時に 明示的に与えられない限り、その 属性 リスト空である

要素は、その 属性リストA含む場合、 属性 A持つ

この仕様および他の仕様は、 要素について 属性変更手順を定義してもよい。このアルゴリズムには elementlocalNameoldValuevalue、および namespace が渡される。

属性 attributeelementoldValue、および newValue を使用して 属性変更を 処理するには、次の手順を実行する:

  1. element について、attributeローカル名attribute名前空間oldValue、« »、« »、null、 および null を使用して、"attributes" の変更レコードを キューに入れる

  2. elementカスタムである場合は、element、 コールバック名 "attributeChangedCallback"、および « attributeローカル名oldValuenewValueattribute名前空間 » を 使用してカスタム要素コールバックリアクションを キューに入れる

  3. elementattributeローカル名oldValuenewValue、および attribute名前空間を使用して 属性変更手順を実行する。

属性 attributevalue変更するには:

  1. oldValueattributeとする。

  2. attributevalue に設定する。

  3. attribute要素oldValue、および value を使用して、attribute属性変更を処理する

属性 attribute要素 element付加するには:

  1. attributeelement属性リスト付加する

  2. attribute要素element に設定する。

  3. attributeノード文書elementノード 文書に設定する。

  4. element、null、および attributeを使用して、attribute属性変更を処理する

属性 attribute除去するには:

  1. elementattribute要素とする。

  2. attributeelement属性 リストから除去する
  3. attribute要素を null に設定する。

  4. elementattribute、および null を使用して attribute属性変更を処理する

属性 oldAttribute属性 newAttribute置換するには:

  1. elementoldAttribute要素とする。

  2. element属性リスト内の oldAttributenewAttribute置換する

  3. newAttribute要素element に設定する。

  4. newAttributeノード文書elementノード 文書に設定する。

  5. oldAttribute要素を null に設定する。

  6. elementoldAttribute、および newAttributeを使用して、 oldAttribute属性変更を処理する


文字列 qualifiedName要素 element が与えられたとき、 名前によって属性を取得するには:

  1. elementHTML 名前空間にあり、そのノード文書HTML 文書である場合は、qualifiedNameASCII 小文字に変換した qualifiedName に設定する。

  2. element属性リスト内で、 修飾名qualifiedName である最初の属性を返し、それ以外の場合は null を返す。

null または文字列 namespace、文字列 localName、および 要素 element が与えられたとき、 名前空間とローカル名によって属性を 取得するには:

  1. namespace が空文字列である場合は、これを null に設定する。

  2. element属性リスト内で、 名前空間namespace であり、 ローカル名localName である属性があればそれを返し、それ以外の場合は null を 返す。

要素 element、文字列 localName、および省略可能な null または文字列 namespace(既定値は null)が与えられたとき、 属性値を取得するには:

  1. attr を、namespacelocalName、および element を指定して 属性を取得した結果とする。

  2. attr が null の場合は、空文字列を返す。

  3. attrを返す。

属性 attr要素 element が与えられたとき、 属性を設定するには:

  1. verifiedValue を、attrローカル名attr名前空間element、および attrを使用して 信頼済み型に適合する属性値を 取得するを呼び出した結果とする。[TRUSTED-TYPES]

  2. attr要素が null でも element でもない場合は、 "InUseAttributeError" DOMExceptionスローする

  3. oldAttr を、attr名前空間attrローカル名、および element を指定して 属性を取得した結果とする。

  4. oldAttrattr である場合は、attr を返す。

  5. attrverifiedValue に設定する。

  6. oldAttr が null でない場合は、oldAttrattr置換する

  7. それ以外の場合は、attrelement付加する

  8. oldAttr を返す。

要素 element、文字列 localName、文字列 value、 省略可能な null または文字列 prefix(既定値は null)、および省略可能な null または文字列 namespace(既定値は null)が与えられたとき、 属性値を設定するには:

  1. attribute を、namespacelocalName、および element を指定して 属性を取得した結果とする。
  2. attribute が null の場合は、elementノード文書localNamenamespaceprefix、および value を指定して 属性を 作成した結果を element付加し、その後返る。
  3. attributevalue変更する

文字列 qualifiedName要素 element が与えられたとき、 名前によって属性を除去するには:

  1. attr を、qualifiedNameelement を指定して 属性を取得した結果とする。

  2. attr が null でない場合は、attr除去する

  3. attr を返す。

null または文字列 namespace、文字列 localName、および 要素 element が与えられたとき、 名前空間とローカル名によって属性を 除去するには:

  1. attr を、namespacelocalName、および element を指定して 属性を取得した結果とする。

  2. attr が null でない場合は、attr除去する

  3. attr を返す。


要素は、関連付けられた 一意識別子(ID)を持つことができる。

歴史的には、要素は、たとえば HTML の id 属性と DTD を使用することで複数の識別子を持つことができた。 この仕様は IDを DOM の概念とし、id 属性によって与えられる 要素ごとに 1 つだけを許可する。

次の属性変更手順を使用して、 要素IDを更新する:

  1. localNameid で、namespace が null であり、 value が null または空文字列である場合は、elementIDを未設定にする。

  2. それ以外で、localNameid で、namespace が null の 場合は、elementIDvalue に設定する。

この仕様は、任意の要素上の classid、および slot 属性について要件を定義するが、それらを使用することが 適合しているかどうかについては規定しない。


ノード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

DOMTokenList オブジェクトを通じて、elementclass 内容属性を空白区切りの トークン集合として操作できる。

element . slot [ = value ]

elementslot 内容属性の値を返す。これを変更するよう設定できる。

文字列 name反映するよう定義された IDL 属性は、次の取得手順と 設定手順を持たなければならない:

取得手順

thisname を指定して 属性値を取得するを実行した結果を返す。

設定手順

name と与えられた値を使用して this属性値を設定する

id 属性は "id" を 反映しなければならない

className 属性は "class" を反映しなければならない

classList の取得手順は、関連付けられた 要素this であり、関連付けられた 属性ローカル名class である DOMTokenList オブジェクトを返すことである。この特定の DOMTokenList オブジェクトのトークン集合は、要素クラスとも呼ばれる。

slot 属性は "slot" を 反映しなければならない

idclass、および slot は、 要素の名前空間に関係なく任意の要素に現れることができるため、実質的に超大域属性である。


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 の、名前空間namespace であり、 ローカル名localName である属性value に設定する。

element . removeAttribute(qualifiedName)

element の、修飾名qualifiedName である最初の属性を除去する。

element . removeAttributeNS(namespace, localName)

element の、名前空間namespace であり、ローカル名localName である 属性を除去する。

element . toggleAttribute(qualifiedName [, force])

force が指定されていない場合は qualifiedName を「切り替え」、 存在する場合は除去し、存在しない場合は追加する。force が true の場合は qualifiedName を追加する。force が false の場合は qualifiedName を除去する。

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 を、namespacelocalName、および this を指定して 属性を取得した結果とする。

  2. attr が null の場合は、null を返す。

  3. attrを返す。

setAttribute(qualifiedName, value) メソッドの手順は次のとおりである:

  1. qualifiedName有効な属性ローカル名でない場合は、 "InvalidCharacterError" DOMExceptionスローする

    引数名とは異なり、 qualifiedName は、その修飾名を持つ属性がすでに存在する場合にのみ修飾名として使用される。 それ以外の場合は、新しい属性のローカル 名として使用される。後者の場合についてのみ検証する必要がある。

  2. thisHTML 名前空間にあり、そのノード文書HTML 文書である場合は、 qualifiedNameASCII 小文字に変換した qualifiedName に設定する。

  3. verifiedValue を、qualifiedName、null、 this、および value を使用して 信頼済み型に適合する属性値を 取得するを呼び出した結果とする。[TRUSTED-TYPES]

  4. attribute を、this属性リスト内で、 修飾名qualifiedName である最初の属性とし、 それ以外の場合は null とする。

  5. attribute が null でない場合は、attributeverifiedValue変更し、返る。

  6. attribute を、thisノード文書qualifiedName、null、 null、および verifiedValue を指定して 属性を作成した結果に設定する。

  7. attributethis付加する

setAttributeNS(namespace, qualifiedName, value) メソッドの手順は次のとおりである:

  1. (namespace, prefix, localName) を、 "attribute" を指定して namespacequalifiedName検証して抽出した結果とする。

  2. verifiedValue を、localNamenamespacethis、および value を使用して 信頼済み型に適合する属性値を 取得するを呼び出した結果とする。[TRUSTED-TYPES]

  3. localNameverifiedValueprefix、および namespace を使用して、this属性値を設定する

removeAttribute(qualifiedName) メソッドの手順は、qualifiedNamethis を指定して属性を除去し、その後 undefined を 返すことである。

removeAttributeNS(namespace, localName) メソッドの手順は、namespacelocalName、および this を指定して属性を除去し、その後 undefined を返すことである。

hasAttribute(qualifiedName) メソッドの 手順は次のとおりである:

  1. thisHTML 名前空間にあり、その ノード文書HTML 文書である場合は、 qualifiedNameASCII 小文字に変換した qualifiedName に設定する。

  2. this が、修飾名qualifiedName である属性持つ場合は true を返し、それ以外の 場合は false を返す。

toggleAttribute(qualifiedName, force) メソッドの手順は次のとおりである:

  1. qualifiedName有効な属性ローカル名でない場合は、 "InvalidCharacterError" DOMExceptionスローする

    修飾名ではなくローカル名として検証する理由については、 上記の説明を参照。

  2. thisHTML 名前空間にあり、その ノード文書HTML 文書である場合は、 qualifiedNameASCII 小文字に変換した qualifiedName に設定する。

  3. attribute を、this属性リスト内で、 修飾名qualifiedName である最初の属性とし、 それ以外の場合は null とする。

  4. attribute が null の場合:

    1. force が指定されていないか true である場合は、 thisノード文書qualifiedName を指定して属性を作成した結果を this付加し、その後 true を返す。

    2. false を返す。

  5. force が指定されていないか false である場合は、 qualifiedNamethis を指定して属性を除去し、その後 false を 返す。

  6. true を返す。

hasAttributeNS(namespace, localName) メソッドの手順は次のとおりである:

  1. namespace が空文字列である場合は、これを null に設定する。

  2. this が、名前空間namespace であり、 ローカル名localName である属性持つ場合は true を返し、それ以外の場合は false を返す。

getAttributeNode(qualifiedName) メソッドの手順は、qualifiedNamethis を指定して属性を取得した結果を返すことである。

getAttributeNodeNS(namespace, localName) メソッドの手順は、namespacelocalName、および this を指定して 属性を取得した結果を返すことである。

setAttributeNode(attr) および setAttributeNodeNS(attr) メソッドの手順は、attrthis を指定して属性を設定した結果を返すことである。

removeAttributeNode(attr) メソッドの手順は次のとおりである:

  1. this属性リストattr含まない場合は、 "NotFoundError" DOMExceptionスローする

  2. attr除去する

  3. attr を返す。


shadow = element . attachShadow(init)

elementシャドウルートを作成して返す。

shadow = element . shadowRoot

elementシャドウルートが存在し、かつその シャドウルートモードが "open" である場合はそれを返し、それ以外の場合は null を返す。

有効なシャドウホスト名は次のいずれかである:

このリストは、組み込み要素が必要に応じて時間の経過とともに内部 シャドウツリーを持てるよう、意図的に制限されている。

The attachShadow(init) メソッドの手順は次のとおりである。

  1. registrythisnode documentcustom element registry とする。

  2. init["customElementRegistry"] exists する場合、registry をそれに設定する。

  3. registry が null ではなく、registryis scoped が false であり、かつ registrythisnode documentcustom element registry ではない場合、 throw a "NotSupportedError" DOMException をスローする。

  4. attach a shadow root を、 thisinit["mode"]、 init["delegatesFocus"]、 init["serializable"]、 init["slotAssignment"]、 init["clonable"]、 および registry を指定して実行する。

  5. thisshadow root を返す。

attach a shadow root とは、element element、文字列 mode、boolean delegatesFocus、boolean serializable、文字列 slotAssignment、boolean clonable、および null または CustomElementRegistry オブジェクト registry が与えられた場合、次の手順を実行することである。

  1. elementnamespaceHTML namespace ではない場合、 throw a "NotSupportedError" DOMException をスローする。

  2. elementlocal namevalid shadow host name ではない場合、 throw a "NotSupportedError" DOMException をスローする。

  3. elementlocal namevalid custom element name である場合、または elementis value が null ではない場合:

    1. definition を、elementcustom element registry、 その namespace、その local name、およびその is value を指定して looking up a custom element definition した結果とする。

    2. definition が null ではなく、definitiondisable shadow が true の場合、 throw a "NotSupportedError" DOMException をスローする。

  4. elementshadow host である場合:

    1. currentShadowRootelementshadow root とする。

    2. 以下のいずれかが true の場合:

      • currentShadowRootdeclarative が false である、または

      • currentShadowRootmodemode ではない場合、

      その場合、 throw a "NotSupportedError" DOMException をスローする。

    3. currentShadowRoot のすべての children を、 tree orderRemove する。

    4. currentShadowRootdeclarative を false に設定する。

    5. Return。

  5. shadow を、elementnode document を指定して、 creating a node した結果であり、 ShadowRoot を実装する node とする。

  6. shadowhostelement に設定する。

  7. shadowmodemode に設定する。

  8. shadowdelegates focusdelegatesFocus に設定する。

  9. elementcustom element state が "precustomized" または "custom" の場合、shadowavailable to element internals を true に設定する。

  10. shadowdeclarative を false に設定する。

  11. shadowserializableserializable に設定する。

  12. shadowslot assignmentslotAssignment に設定する。

  13. shadowclonableclonable に設定する。

  14. shadowcustom element registryregistry に設定する。

  15. elementshadow rootshadow に設定する。

shadowRoot の取得手順は次のとおりである:

  1. shadowthisシャドウルートとする。

  2. shadow が null であるか、そのモードが "closed" である場合は、null を返す。

  3. shadow を返す。


registry = element . customElementRegistry

elementCustomElementRegistry オブジェクトがあればそれを返し、それ以外の場合は null を返す。

customElementRegistry の取得手順は、 thisカスタム要素レジストリを返すことである。


element . closest(selectors)
selectors に一致する最初の 包括的祖先を (element から開始して)返し、それ以外の場合は null を返す。
element . matches(selectors)
selectorselementルートに対して照合した結果が element である場合は true を返し、それ以外の場合は false を返す。

closest(selectors) メソッドの手順は次の とおりである:

  1. selector を、selectors からセレクターを構文解析した結果とする。 [SELECTORS4]

  2. selector が失敗である場合は、 "SyntaxError" DOMExceptionスローする

  3. elements を、this包括的祖先のうち 要素であるものを、逆 ツリー順に並べたものとする。

  4. elements の各 element について、selectorelement、およびスコープルート this を使用して 要素に対してセレクターを照合するが 成功を返す場合は、element を返す。[SELECTORS4]

  5. null を返す。

matches(selectors) および webkitMatchesSelector(selectors) メソッドの手順は次のとおりである:

  1. selector を、selectors からセレクターを構文解析した結果とする。 [SELECTORS4]

  2. selector が失敗である場合は、 "SyntaxError" DOMExceptionスローする

  3. selectorthis、およびスコープルート this を使用して 要素に対してセレクターを照合するの 結果が成功である場合は true を返し、それ以外の場合は false を返す。 [SELECTORS4]


getElementsByTagName(qualifiedName) メソッドの手順は、this について 修飾名 qualifiedName を持つ要素の リストを返すことである。

getElementsByTagNameNS(namespace, localName) メソッドの手順は、this について 名前空間 namespace とローカル名 localName を持つ要素のリストを返すことである。

getElementsByClassName(classNames) メソッドの手順は、this について クラス名 classNames を持つ要素のリストを 返すことである。


要素 element、文字列 where、およびノード node が与えられたとき、隣接挿入するには、 whereASCII 大文字・小文字を区別せず最初に一致する項目に 関連付けられた手順を実行する:

"beforebegin"

elementが null である場合は、null を返す。

nodeelement内の element の前に 事前挿入した結果を返す。

"afterbegin"

nodeelement 内の element最初の子の前に 事前挿入した結果を返す。

"beforeend"

nodeelement 内の null の前に 事前挿入した結果を返す。

"afterend"

elementが null である場合は、null を返す。

nodeelement内の element次の兄弟の前に 事前挿入した結果を返す。

それ以外

"SyntaxError" DOMExceptionスローする

insertAdjacentElement(where, element) メソッドの手順は、thiswhere、および element を指定して 隣接挿入するを実行した結果を返すことである。

insertAdjacentText(where, data) メソッドの手順は次のとおりである:

  1. text を、thisノード文書data を指定して テキストノードを作成した結果とする。

  2. thiswhere、および 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 オブジェクトのサポートされるプロパティインデックスは、0 から その属性リストサイズ − 1 までの範囲の 数値である。ただし、属性リスト空である場合は、 サポートされるプロパティインデックスは存在しない。

length の取得手順は、 属性リストサイズを返すことである。

item(index) メソッドの手順は次のとおりである:

  1. indexthis属性リストサイズ以上である 場合は、null を返す。

  2. それ以外の場合は、this属性リスト[index] を返す。

NamedNodeMap オブジェクトのサポートされるプロパティ名は、次の 手順を実行した返値である:

  1. names を、この NamedNodeMap オブジェクトの属性リスト内の属性修飾名から、重複を省いて順番に並べた ものとする。

  2. この NamedNodeMap オブジェクトの要素HTML 名前空間にあり、そのノード文書HTML 文書である 場合は、names の各 name について反復する

    1. lowercaseName を、nameASCII 小文字に変換したものとする。

    2. lowercaseNamename と等しくない場合は、 names から name を除去する。

  3. names を返す。

getNamedItem(qualifiedName) メソッドの手順は、qualifiedName要素を指定して属性を取得した結果を返すことである。

getNamedItemNS(namespace, localName) メソッドの手順は、namespacelocalName、および要素を指定して 属性を取得した結果を返すことである。

setNamedItem(attr) および setNamedItemNS(attr) メソッドの 手順は、attr要素を指定して属性を設定した結果を返すことである。

removeNamedItem(qualifiedName) メソッドの手順は次のとおりである:

  1. attr を、qualifiedName要素を指定して 属性を除去した結果とする。

  2. attr が null の場合は、"NotFoundError" DOMExceptionスローする

  3. attr を返す。

removeNamedItemNS(namespace, localName) メソッドの手順は次のとおりである:

  1. attr を、namespacelocalName、および要素を指定して 属性を除去した結果とする。

  2. attr が null の場合は、"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; // historical; always returns true
};

Attr ノードは、単に 属性と呼ばれる。IDL 属性との混同を避けるため、 内容属性と呼ばれることもある。

属性には、 名前空間(null または空でない文字列)、 名前空間接頭辞(null または空でない文字列)、 ローカル名(空でない文字列)、 (文字列)、および 要素(null または 要素)がある。

今日設計されるのであれば、名前と値だけを持つものになっていただろう。☹

属性修飾名は、その名前空間 接頭辞が null である場合は、その ローカル名であり、それ以外の場合は、その 名前空間接頭辞、それに続く ":"、 さらにそれに続く ローカル名である。

ユーザーエージェントは、最適化のため、これを内部スロットとして 持つことができる。

文書 document、文字列 localName、および省略可能な文字列または null の namespace(既定値は null)、文字列または null の prefix(既定値は null)、および文字列 value(既定値は空文字列)が与えられたとき、属性を作成するには:

  1. attribute を、document を指定して Attr を実装するノードを作成した結果とする。

  2. attribute名前空間namespace に、 名前空間接頭辞prefix に、 ローカル名localName に、さらにvalue に設定する。

  3. attribute を返す。

A 属性とは、その ローカル名A であり、その 名前空間および 名前空間接頭辞が null である属性である。


namespaceURI の取得手順は、 this名前空間を返すことである。

prefix の取得手順は、this名前空間接頭辞を返すことである。

localName の取得手順は、 thisローカル名を返すことである。

name の取得手順は、this修飾名を返すことである。

value の取得手順は、thisを 返すことである。

属性 attribute と文字列 value が与えられたとき、既存の属性値を設定するには、次の手順を実行する:

  1. attribute要素が null である場合は、 attributevalue に設定し、返る。

  2. elementattribute要素とする。

  3. verifiedValue を、attributeローカル名attribute名前空間element、および value を使用して 信頼済み型に適合する属性値を 取得するを呼び出した結果とする。[TRUSTED-TYPES]

  4. attribute要素が null である場合は、 attributeverifiedValue に設定し、返る。

  5. attributeverifiedValue変更する

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 は抽象インターフェイスである。その直接のインスタンスを取得することはできない。これは、 TextProcessingInstruction、 および Comment ノードによって使用される。

CharacterData インターフェイスを継承する各ノードには、 データと呼ばれる変更可能な文字列が関連付けられている。

ノード nodeデータを置換するには、整数 offset、整数 count、文字列 data、および省略可能なブール値 piAttributesAlreadyUpdated(既定値は false)を使用して、次を行う:

  1. lengthnode長さとする。

  2. offsetlength より大きい場合は、 "IndexSizeError" DOMExceptionスローする

  3. offset + countlength より大きい場合は、 countlengthoffset に設定する。

  4. node について、null、null、nodeデータ、« »、« »、null、および null を使用して、 "characterData" の変更レコードをキューに入れる

  5. nodeデータ内の offset コード単位の後に data を挿入する。

  6. deleteOffsetoffset + data長さとする。

  7. deleteOffset コード単位から 開始して、nodeデータから count 個の コード単位を除去する。

  8. 開始ノードnode であり、 開始オフセットoffset より 大きく、かつ offset + count 以下である各ライブ範囲について、その 開始オフセットoffset に設定する。

  9. 終了ノードnode であり、 終了オフセットoffset より 大きく、かつ offset + count 以下である各ライブ範囲について、その 終了オフセットoffset に設定する。

  10. 開始ノードnode であり、 開始オフセットoffset + count より大きい各ライブ範囲について、その 開始オフセットdata長さだけ増加させ、 count だけ減少させる。

  11. 終了ノードnode であり、 終了オフセットoffset + count より大きい各ライブ範囲について、その 終了オフセットdata長さだけ増加させ、 count だけ減少させる。

  12. nodeProcessingInstruction ノードであり、 piAttributesAlreadyUpdated が false である場合は、node を指定して データから属性を更新する

  13. nodeが null でない場合は、 nodeについて 子が変更された手順を実行する。

ノード node部分文字列データを取得するには、 整数 offset と整数 count を使用して、次を行う:

  1. lengthnode長さとする。

  2. offsetlength より大きい場合は、 "IndexSizeError" DOMExceptionスローする

  3. offset + countlength より大きい場合は、 nodeデータ内の offset番目コード単位から末尾までのコード単位を値とする文字列を返す。

  4. nodeデータ内の offset番目コード単位から offset+count番目コード単位までの コード単位を値とする文字列を返す。

data の取得手順は、 thisデータを返すことである。その設定手順は、 thisデータを置換することであり、0、 this長さ、および与えられた値を使用する。

length の取得手順は、 this長さを返すことである。

substringData(offset, count) メソッドの手順は、this部分文字列データを取得した結果を返すことであり、 offsetcount を使用する。

appendData(data) メソッドの手順は、 thisデータを置換することであり、 this長さ、0、および data を使用する。

insertData(offset, data) メソッドの手順は、thisデータを置換することであり、offset、0、および data を使用する。

deleteData(offset, count) メソッドの手順は、thisデータを置換することであり、offsetcount、および 空文字列を使用する。

replaceData(offset, count, data) メソッドの手順は、thisデータを置換することであり、offsetcount、および 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 = ""])
データdata である、新しい Text ノードを返す。
text . splitText(offset)
指定された offsetデータを分割し、残りを Text ノードとして返す。
text . wholeText
直接のすべての Text ノード 兄弟の、 結合されたデータを返す。

排他的 Text ノードとは、 CDATASection ノードではない Text ノードである。

ノード node連続する Text ノードは、 node、存在する場合は node直前の兄弟である Text ノードと その連続する Text ノード、および存在する場合は node直後の兄弟である Text ノードと、その連続する Text ノードであり、重複は除外する。

ノード node連続する排他的 Text ノードは、 node、存在する場合は node直前の兄弟である 排他的 Text ノードと、その 連続する排他的 Text ノード、および 存在する場合は node直後の 兄弟である排他的 Text ノードと、その 連続する排他的 Text ノードであり、 重複は除外する。

ノード node子テキスト内容は、 node のすべての Text ノードであるデータを、 ツリー順連結したものである。

ノード node子孫テキスト内容は、 node のすべての Text ノードである子孫データを、 ツリー順連結したものである。

文書 document と文字列 data が与えられたとき、テキストノードを作成するには:

  1. text を、document を指定して Text を実装する ノードを作成した結果とする。

  2. textデータdata に設定する。

  3. text を返す。


new Text(data) コンストラクターの手順は、thisデータdata に設定し、 thisノード 文書現在のグローバルオブジェクト関連付けられた Documentに設定することである。

整数 offset を使用して、Text ノード node分割するには:

  1. lengthnode長さとする。

  2. offsetlength より大きい場合は、 "IndexSizeError" DOMExceptionスローする

  3. countlengthoffset とする。

  4. newData を、offsetcount を使用して node部分文字列データを取得した結果とする。

  5. newNode を、nodeノード 文書newData を指定してテキストノードを作成した結果とする。

  6. parentnodeとする。

  7. parent が null でない場合:

    1. newNodeparent 内の node直後の兄弟の前に挿入する

    2. 開始 ノードnode であり、 開始オフセットoffset より大きい各ライブ範囲について、その 開始ノードnewNode に 設定し、その開始オフセットoffset だけ減少させる。

    3. 終了ノードnode であり、 終了オフセットoffset より大きい各ライブ範囲について、その 終了ノードnewNode に設定し、その終了 オフセットoffset だけ減少させる。

    4. 開始 ノードparent であり、 開始オフセットnodeインデックス + 1 に等しい各ライブ範囲について、その 開始オフセットを 1 増加させる。

    5. 終了ノードparent であり、 終了オフセットnodeインデックス + 1 に等しい各ライブ範囲について、その 終了オフセットを 1 増加させる。

  8. offsetcount、および空文字列を使用して、nodeデータを置換する

  9. newNode を返す。

splitText(offset) メソッドの手順は、 オフセット offset を使用してthis分割することである。

wholeText の取得手順は、 this連続する Text ノードデータを、 ツリー順連結したものを返すことである。

4.12. インターフェイス CDATASection

[Exposed=Window]
interface CDATASection : Text {
};

4.13. インターフェイス ProcessingInstruction

[Exposed=Window]
interface ProcessingInstruction : CharacterData {
  constructor(DOMString target, optional DOMString data = "");

  readonly attribute DOMString target;

  boolean hasAttributes();
  sequence<DOMString> getAttributeNames();
  DOMString? getAttribute(DOMString name);
  undefined setAttribute(DOMString name, DOMString value);
  undefined removeAttribute(DOMString name);
  boolean toggleAttribute(DOMString name, optional boolean force);
  boolean hasAttribute(DOMString name);
};
pi = new ProcessingInstruction(target [, data = ""])
対象target であり、 データdata である、新しい ProcessingInstruction ノードを返す。
pi . target
対象を返す。
pi . hasAttributes()

pi が属性を持つ場合は true を返し、それ以外の場合は false を返す。

pi . getAttributeNames()

pi のすべての属性の名前を返す。重複を含むことはできない。

pi . getAttribute(name)

piname という名前の属性の値を返し、そのような属性が ない場合は null を返す。

pi . setAttribute(name, value)

piname という名前の属性を value に設定する。

pi . removeAttribute(name)

piname という名前の属性を除去する。

pi . toggleAttribute(name [, force])

force が指定されていない場合は name を「切り替え」、 存在する場合は除去し、存在しない場合は追加する。force が true の場合は name を追加する。force が false の場合は name を除去する。

name が現在存在する場合は true を返し、それ以外の場合は false を返す。

pi . hasAttribute(name)

piname という名前の属性を持つ場合は true を返し、それ以外の場合は false を返す。

ProcessingInstruction ノードには、関連付けられた 対象がある。

ProcessingInstruction ノードには、関連付けられた 属性マップがある。これは マップであり、 初期状態では空である。

文書 document、文字列 target、および文字列 data が与えられたとき、 処理命令ノードを作成するには:

  1. pi を、document を指定して ProcessingInstruction を実装するノードを作成した結果とする。

  2. targetdata を使用して pi初期化する

  3. pi を返す。

ProcessingInstruction ノード pi を、 targetdata を使用して初期化するには:

  1. targetName 生成規則に一致しない場合は、 "InvalidCharacterError" DOMExceptionスローする

  2. data が文字列 "?>" を含む場合は、 "InvalidCharacterError" DOMExceptionスローする

  3. pi対象target に設定する。

  4. piデータdata に設定する。

  5. pi を指定してデータから属性を更新する

ProcessingInstruction ノード pi が与えられたとき、データから属性を更新するには:

  1. pi属性マップ空にする

  2. result を、piデータを 指定して文字列から擬似属性を構文解析する規則を呼び出した 構文解析結果とする。

  3. result がエラーである場合は、返る。

  4. result の各擬似属性 pseudoAttr について、 pi属性マップ[pseudoAttr名前] を pseudoAttr設定する

ProcessingInstruction ノード pi が与えられたとき、属性からデータを更新するには:

  1. data を空文字列とする。

  2. pi属性マップの各 namevalue について反復する

    1. data が空文字列でない場合は、U+0020 SPACE を data に付加する。

    2. namedata に付加する。

    3. U+003D (=) を data に付加する。

    4. U+0022 (") を data に付加する。

    5. value 内のすべての U+0026 (&) を "&amp;" で置換する。

    6. value 内のすべての U+003C (<) を "&lt;" で置換する。

    7. value 内のすべての U+003D (>) を "&gt;" で置換する。

    8. value 内のすべての U+0022 (") を "&quot;" で置換する。

    9. valuedata に付加する。

    10. U+0022 (") を data に付加する。

  3. 0、pi長さdata、および true を使用して、piデータを置換する

ProcessingInstruction ノード pi と 文字列 name が与えられたとき、処理命令属性を取得するには、 pi属性マップ[name] を、null を 既定値として返す。


new ProcessingInstruction(target, data) コンストラクターの手順は次のとおりである:

  1. thisノード文書を、現在のグローバルオブジェクト関連付けられた Documentに設定する。

  2. targetdata を使用してthis初期化する

target の取得手順は、 this対象を返すことである。

hasAttributes() メソッドの 手順は、this属性マップ空である場合は false を返し、それ以外の場合は true を返すことである。

getAttributeNames() メソッドの手順は、this属性マップキーを取得した結果を返すことである。

getAttribute(name) メソッドの 手順は、thisname を指定して 処理命令属性を取得した結果を返すことである。

setAttribute(name, value) メソッドの手順は次のとおりである:

  1. name有効な属性ローカル名でない場合は、 "InvalidCharacterError" DOMExceptionスローする

  2. this属性マップ[name] を value設定する

  3. this を指定して属性からデータを更新する

removeAttribute(name) メソッドの手順は次のとおりである:

  1. this属性マップ[name] を 除去する

  2. this を指定して属性からデータを更新する

toggleAttribute(name, force) メソッドの手順は次のとおりである:

  1. name有効な属性ローカル名でない場合は、 "InvalidCharacterError" DOMExceptionスローする

  2. attributesthis属性マップとする。

  3. attributes[name] が存在しない場合:

    1. force が指定されていないか true である場合は、 attributes[name] を空文字列に設定しthis を指定して属性からデータを更新し、 その後 true を返す。

    2. false を返す。

  4. force が指定されていないか false である場合は、 attributes[name] を除去しthis を指定して 属性からデータを更新し、その後 false を返す。

  5. true を返す。

hasAttribute(name) メソッドの手順は、this属性マップ[name] が存在する場合は true を返し、それ以外の場合は false を返すことである。

4.14. インターフェイス Comment

[Exposed=Window]
interface Comment : CharacterData {
  constructor(optional DOMString data = "");
};
comment = new Comment([data = ""])
データdata である、新しい Comment ノードを返す。

コメント ノードを作成するには、文書 document と 文字列 data が与えられたとき:

  1. comment を、document を指定して Comment を実装するノードを作成した結果とする。

  2. commentデータdata に設定する。

  3. comment を返す。

new Comment(data) コンストラクターの手順は、thisデータdata に設定し、 thisノード 文書現在のグローバルオブジェクト関連付けられた Documentに設定することである。

5. Range(範囲)

5.1. 「DOM Range」について

StaticRange および Range オブジェクト(範囲)は、 ノードツリー内の 内容の列を表す。各範囲には、始点終点があり、それらは 境界点である。境界点は、タプルであり、 ノードオフセットから成る。 言い換えると、 範囲は、ノード ツリー内の、2 つの 境界点の間にある 内容の一部を表す。

範囲は、 内容の選択やコピーのために、編集で頻繁に使用される。

上記のノードツリーでは、 範囲を使用して、 “syndata is awes” というシーケンスを表現できる。pp 要素に、 そして emem 要素に割り当てられていると 仮定すると、これは次のように行われる:

var range = new Range(),
    firstText = p.childNodes[1],
    secondText = em.firstChild
range.setStart(firstText, 9) // 先頭の空白を忘れないこと
range.setEnd(secondText, 4)
// range は、文字列化すると前述の引用になる

上記の ノードツリー内の srcalt のような属性は、範囲によって表現することはできない。範囲が有用なのは、 ノードに対してのみである。

Range オブジェクトは、 StaticRange オブジェクトとは異なり、 ノードツリーへの 変更の影響を受ける。そのため、ライブ範囲とも呼ばれる。このような変更によって 無効になることはなく、引き続き同じ内容部分を表すように維持される。 必然的に、たとえば表している内容の一部が変更される場合、ライブ範囲自体も、 ノードツリーへの 変更の一環として変更されることがある。

詳細については、挿入および除去アルゴリズム、 normalize() メソッド、ならびにデータを置換するおよび分割する アルゴリズムを参照。

ノード ツリーの変更に応じてライブ範囲を更新する処理は、高コストになる可能性がある。 ノードツリーが 変更されるたびに、影響を受けるすべての Range オブジェクトを更新する必要がある。アプリケーションが一部のライブ範囲に関心がなくても、 変更が発生した際には、それらを最新の状態に保つためのコストを負担しなければならない。

StaticRange オブジェクトは、ノードツリーが変更されても更新されない、軽量な 範囲である。そのため、 ライブ範囲と同じ保守コストは発生しない。

5.2. 境界点

境界点は、 ノードノード)と オフセット(非負整数)からなる タプルである。

正しい境界点オフセットは、 0 以上、その境界点ノード長さ以下である。

境界点nodeBoffsetB)に対する 境界点nodeAoffsetA)の 位置は、次の手順によって返される 等しい、または である:

  1. 表明:nodeAnodeBは同じ ルートを持つ。

  2. nodeAnodeBである場合、offsetAoffsetBであれば等しいを返し、offsetAoffsetBより小さければを返し、offsetAoffsetBより大きければを返す。
  3. nodeAnodeB後続する場合、 (nodeAoffsetA)に対する (nodeBoffsetB)の 位置であれば を返し、それが であれば を返す。

  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" DOMExceptionスローする

  2. this開始を (init["startContainer"], init["startOffset"]) に設定し、終了を (init["endContainer"], init["endOffset"]) に設定する。

StaticRange は、次のすべてが true である場合に妥当である:

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 は、 nodeルートrangeルートであり、かつ(node, 0)が range開始より であり、 かつ(node, node長さ)が range終了よりである場合、 ライブ範囲 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開始および終了を、 (現在のグローバルオブジェクト関連付けられた Document, 0)に設定することである。


container = range . commonAncestorContainer
range開始ノードおよび 終了 ノードの両方の祖先であるノードのうち、 文書から最も離れたものを返す。

ライブ範囲 range共通 祖先を取得するには:

  1. containerrange開始ノードとする。

  2. containerrange終了ノード包括的祖先でない間、 containercontainerに設定する。

  3. container を返す。

commonAncestorContainer の取得手順は、 this共通祖先を取得した結果を返すことである。


range開始または終了を設定するには、 それを境界点node, offset)に設定する:

  1. node文書型である場合は、"InvalidNodeTypeError" DOMExceptionスローする

  2. offsetnode長さより大きい場合は、 "IndexSizeError" DOMExceptionスローする

  3. boundaryPoint境界点node, offset)とする。

  4. これらの手順が「開始を設定する」として呼び出された場合
    1. rangeルートnodeルートではないか、 boundaryPointrange終了よりである場合、 range終了boundaryPoint に設定する。

    2. range開始boundaryPoint に設定する。

    これらの手順が「終了を設定する」として呼び出された場合
    1. rangeルートnodeルートではないか、 boundaryPointrange開始よりである場合、 range開始boundaryPoint に設定する。

    2. range終了boundaryPoint に設定する。

setStart(node, offset) メソッドの 手順は、this開始を設定し境界点node, offset)にすることである。

setEnd(node, offset) メソッドの 手順は、this終了を設定し境界点node, offset)にすることである。

setStartBefore(node) メソッドの手順は 次のとおりである:

  1. parentnodeとする。

  2. parent が null である場合は、"InvalidNodeTypeError" DOMExceptionスローする

  3. this開始を設定し境界点parent, nodeインデックス)にする。

setStartAfter(node) メソッドの手順は 次のとおりである:

  1. parentnodeとする。

  2. parent が null である場合は、"InvalidNodeTypeError" DOMExceptionスローする

  3. this開始を設定し境界点parent, nodeインデックス + 1)にする。

setEndBefore(node) メソッドの手順は 次のとおりである:

  1. parentnodeとする。

  2. parent が null である場合は、"InvalidNodeTypeError" DOMExceptionスローする

  3. this終了を設定し境界点parent, nodeインデックス)にする。

setEndAfter(node) メソッドの手順は 次のとおりである:

  1. parentnodeとする。

  2. parent が null である場合は、"InvalidNodeTypeError" DOMExceptionスローする

  3. this終了を設定し境界点parent, nodeインデックス + 1)にする。

collapse(toStart) メソッドの手順は、 toStart が true である場合は終了開始に設定し、それ以外の場合は 開始終了に設定する ことである。

範囲 range 内でノード node選択するには:

  1. parentnodeとする。

  2. parent が null である場合は、"InvalidNodeTypeError" DOMExceptionスローする

  3. indexnodeインデックスとする。

  4. range開始境界点parent, index)に設定する。

  5. range終了境界点parent, index + 1)に設定する。

selectNode(node) メソッドの手順は、 this 内で node選択することである。

selectNodeContents(node) メソッドの 手順は次のとおりである:

  1. node文書型である場合は、"InvalidNodeTypeError" DOMExceptionスローする

  2. lengthnode長さとする。

  3. 開始境界点node, 0)に設定する。

  4. 終了境界 点node, length)に設定する。


compareBoundaryPoints(how, sourceRange) メソッドの手順は次のとおりである:

  1. how が次のいずれでもない場合

    "NotSupportedError" DOMExceptionスローする

  2. thisルートsourceRangeルート ではない場合は、"WrongDocumentError" DOMExceptionスローする

  3. thisPoint および sourcePoint を null とする。

  4. how に応じて切り替える:

    START_TO_START

    thisPointthis開始に設定し、 sourcePointsourceRange開始に設定する。

    START_TO_END

    thisPointthis終了に設定し、sourcePointsourceRange開始に設定する。

    END_TO_END

    thisPointthis終了に設定し、sourcePointsourceRange終了に設定する。

    END_TO_START

    thisPointthis開始に設定し、 sourcePointsourceRange終了に設定する。

  5. sourcePoint に対する thisPoint位置に応じて切り替える:

    −1 を返す。
    等しい
    0 を返す。
    1 を返す。

deleteContents() メソッドの手順は次のとおりである:

  1. this折りたたまれている場合は、返る。

  2. originalStartNodeoriginalStartOffsetoriginalEndNode、および originalEndOffset を、それぞれ this開始ノード開始 オフセット終了ノード、および 終了オフセットとする。

  3. originalStartNodeoriginalEndNode であり、それが CharacterData ノードである場合:

    1. originalStartOffsetoriginalEndOffsetoriginalStartOffset、および空文字列を使用して、 originalStartNodeデータを置換する

    2. 返る。

  4. nodesToRemove を、this包含されているすべてのノードツリー順に並べたリストとする。ただし、その this包含されている ノードは除外する。

  5. newNode および newOffset を null とする。

  6. originalStartNodeoriginalEndNode包括的祖先である場合は、 newNodeoriginalStartNode に設定し、 newOffsetoriginalStartOffset に設定する。

  7. それ以外の場合:

    1. referenceNodeoriginalStartNode とする。

    2. referenceNodeが null ではなく、かつ originalEndNode包括的祖先でない間、 referenceNode をそのに設定する。

    3. newNodereferenceNodeに設定し、 newOffsetreferenceNodeインデックス + 1 に設定する。

      referenceNodeが null であるなら、 それはthisルートになる。そしてその場合、それは originalEndNode包括的祖先になるため、この地点には 到達できない。

  8. this開始および終了を (newNode, newOffset)に設定する。

  9. originalStartNodeCharacterData ノードである場合、 originalStartOffsetoriginalStartNode長さoriginalStartOffset、および 空文字列を使用して、originalStartNodeデータを置換する

  10. nodesToRemove の各 node について、ツリー順に、 node除去する

  11. originalEndNodeCharacterData ノードである場合、 0、originalEndOffset、および空文字列を使用して、 originalEndNodeデータを置換する

ライブ範囲 range抽出するには:

  1. fragment を、range開始ノードノード文書を指定して 文書断片を 作成した結果とする。

  2. range折りたたまれている場合は、fragment を返す。

  3. originalStartNodeoriginalStartOffsetoriginalEndNode、および originalEndOffset を、それぞれ range開始ノード開始 オフセット終了ノード、および 終了オフセットとする。

  4. originalStartNodeoriginalEndNode であり、それが CharacterData ノードである場合:

    1. cloneoriginalStartNode複製とする。

    2. cloneデータを、 originalStartOffset および originalEndOffsetoriginalStartOffset を使用して originalStartNode部分文字列データを取得した結果に設定する。

    3. clonefragment付加する

    4. originalStartOffsetoriginalEndOffsetoriginalStartOffset、および空文字列を使用して、 originalStartNodeデータを置換する

    5. fragment を返す。
  5. commonAncestorrange共通 祖先を取得した結果とする。

  6. firstPartiallyContainedChild を null とする。

  7. originalStartNodeoriginalEndNode包括的 祖先でない場合、firstPartiallyContainedChildcommonAncestorのうち、range部分的に 包含されている最初のものに設定する。
  8. lastPartiallyContainedChild を null とする。

  9. originalEndNodeoriginalStartNode包括的祖先でない場合、 lastPartiallyContainedChildcommonAncestor のうち、range部分的に 包含されている最後のものに設定する。

    これらの変数への代入は、実際には常に意味を成す。たとえば、 originalStartNodeoriginalEndNode包括的祖先でない場合、 originalStartNode 自体が range部分的に 包含されており、さらに commonAncestorに至るまでのすべての 祖先も同様である。 commonAncestororiginalStartNode ではあり得ない。なぜなら、 originalEndNode包括的祖先でなければならないからである。 もう一方の場合も同様である。また、両方が定義されている場合、2 つの が等しくなることはない。

  10. containedChildren を、commonAncestorのうち、 range包含されているすべてのものを ツリー 順に並べたリストとする。

  11. containedChildren のいずれかのメンバーが文書型である場合は、 "HierarchyRequestError" DOMExceptionスローする

    最初または最後の部分的に包含されているノードについて心配する必要はない。 文書型が部分的に包含されることは決してないためである。 文書型は範囲の境界点になることができず、また何かの祖先になることもできない。

  12. newNode および newOffset を null とする。

  13. originalStartNodeoriginalEndNode包括的祖先である場合、 newNodeoriginalStartNode に設定し、 newOffsetoriginalStartOffset に設定する。

  14. それ以外の場合:

    1. referenceNodeoriginalStartNode とする。

    2. referenceNodeが null ではなく、かつ originalEndNode包括的祖先でない間、 referenceNode をそのに設定する。

    3. newNodereferenceNodeに設定し、 newOffsetreferenceNodeインデックス + 1 に設定する。

      referenceNodeが null であるなら、 それは rangeルートになる。そしてその場合、それは originalEndNode包括的祖先になるため、この地点には 到達できない。

  15. range開始および終了を (newNode, newOffset)に設定する。

  16. firstPartiallyContainedChildCharacterData ノードである場合:

    この場合、firstPartiallyContainedChildoriginalStartNode である。

    1. cloneoriginalStartNode複製とする。

    2. cloneデータを、 originalStartOffset および originalStartNode長さoriginalStartOffset を使用して originalStartNode部分文字列データを取得した結果に設定する。

    3. clonefragment付加する

    4. originalStartOffsetoriginalStartNode長さoriginalStartOffset、および 空文字列を使用して、originalStartNodeデータを置換する

  17. それ以外で、firstPartiallyContainedChild が null でない場合:

    1. clonefirstPartiallyContainedChild複製とする。

    2. clonefragment付加する

    3. subrange を、開始が (originalStartNode, originalStartOffset)であり、終了が (firstPartiallyContainedChild, firstPartiallyContainedChild長さ)である、新しい ライブ範囲とする。

    4. subfragmentsubrange抽出した結果とする。

    5. subfragmentclone付加する
  18. containedChildren の各 contained child について、 contained childfragment付加する

  19. lastPartiallyContainedChildCharacterData ノードである場合:

    この場合、lastPartiallyContainedChildoriginalEndNode である。

    1. cloneoriginalEndNode複製とする。

    2. cloneデータを、0 および originalEndOffset を使用して originalEndNode部分文字列データを取得した結果に設定する。

    3. clonefragment付加する

    4. 0、originalEndOffset、および空文字列を使用して、 originalEndNodeデータを置換する

  20. それ以外で、lastPartiallyContainedChild が null でない場合:

    1. clonelastPartiallyContainedChild複製とする。

    2. clonefragment付加する

    3. subrange を、開始が (lastPartiallyContainedChild, 0)であり、終了が (originalEndNode, originalEndOffset)である、新しい ライブ範囲とする。

    4. subfragmentsubrange抽出した結果とする。

    5. subfragmentclone付加する

  21. fragment を返す。

extractContents() メソッドの手順は、 this抽出した結果を返すことである。

ライブ範囲 range内容を複製するには:

  1. fragment を、range開始ノードノード文書を指定して 文書断片を 作成した結果とする。

  2. range折りたたまれている場合は、fragment を返す。

  3. originalStartNodeoriginalStartOffsetoriginalEndNode、および originalEndOffset を、それぞれ range開始ノード開始 オフセット終了ノード、および 終了オフセットとする。

  4. originalStartNodeoriginalEndNode であり、それが CharacterData ノードである場合:

    1. cloneoriginalStartNode複製とする。

    2. cloneデータを、 originalStartOffset および originalEndOffsetoriginalStartOffset を使用して originalStartNode部分文字列データを取得した結果に設定する。

    3. clonefragment付加する

    4. fragment を返す。

  5. commonAncestorrange共通 祖先を取得した結果とする。

  6. firstPartiallyContainedChild を null とする。

  7. originalStartNodeoriginalEndNode包括的祖先でない場合、 firstPartiallyContainedChildcommonAncestor のうち、range部分的に 包含されている最初のものに設定する。

  8. lastPartiallyContainedChild を null とする。

  9. originalEndNodeoriginalStartNode包括的祖先でない場合、 lastPartiallyContainedChildcommonAncestor のうち、range部分的に 包含されている最後のものに設定する。

    これらの変数への代入は、実際には常に意味を成す。たとえば、 originalStartNodeoriginalEndNode包括的祖先でない場合、 originalStartNode 自体が range部分的に 包含されており、さらに commonAncestorに至るまでのすべての 祖先も同様である。 commonAncestororiginalStartNode ではあり得ない。なぜなら、 originalEndNode包括的祖先でなければならないからである。 もう一方の場合も同様である。また、両方が定義されている場合、2 つの が等しくなることはない。

  10. containedChildren を、commonAncestorのうち、 range包含されているすべてのものを ツリー 順に並べたリストとする。

  11. containedChildren のいずれかのメンバーが文書型である場合は、 "HierarchyRequestError" DOMExceptionスローする

    最初または最後の部分的に包含されているノードについて心配する必要はない。 文書型が部分的に包含されることは決してないためである。 文書型は範囲の境界点になることができず、また何かの祖先になることもできない。

  12. firstPartiallyContainedChildCharacterData ノードである場合:

    この場合、firstPartiallyContainedChildoriginalStartNode である。

    1. cloneoriginalStartNode複製とする。

    2. cloneデータを、 originalStartOffset および originalStartNode長さoriginalStartOffset を使用して originalStartNode部分文字列データを取得した結果に設定する。

    3. clonefragment付加する

  13. それ以外で、firstPartiallyContainedChild が null でない場合:

    1. clonefirstPartiallyContainedChild複製とする。

    2. clonefragment付加する

    3. subrange を、開始が (originalStartNode, originalStartOffset)であり、終了が (firstPartiallyContainedChild, firstPartiallyContainedChild長さ)である、新しい ライブ範囲とする。

    4. subfragmentsubrange内容を 複製した結果とする。

    5. subfragmentclone付加する

  14. containedChildren の各 contained child について:

    1. clone を、subtree を true に設定した contained child複製とする。

    2. clonefragment付加する

  15. lastPartiallyContainedChildCharacterData ノードである場合:

    この場合、lastPartiallyContainedChildoriginalEndNode である。

    1. cloneoriginalEndNode複製とする。

    2. cloneデータを、0 および originalEndOffset を使用して originalEndNode部分文字列データを取得した結果に設定する。

    3. clonefragment付加する

  16. それ以外で、lastPartiallyContainedChild が null でない場合:

    1. clonelastPartiallyContainedChild複製とする。

    2. clonefragment付加する

    3. subrange を、開始が (lastPartiallyContainedChild, 0)であり、終了が (originalEndNode, originalEndOffset)である、新しい ライブ範囲とする。

    4. subfragmentsubrange内容を 複製した結果とする。

    5. subfragmentclone付加する

  17. fragment を返す。

cloneContents() メソッドの手順は、 this内容を複製した結果を返すことである。

ライブ範囲 rangeノード node挿入するには:

  1. range開始ノードProcessingInstruction または Comment ノードであるか、 そのが null である Text ノードであるか、 または node である場合は、"HierarchyRequestError" DOMExceptionスローする

  2. referenceNode を null とする。

  3. range開始ノードText ノードである場合、 referenceNode をその Text ノードに設定する。

  4. それ以外の場合、そのようなが存在するなら、referenceNoderange開始ノードのうち、そのインデックスrange開始オフセットであるものに設定し、 それ以外の場合は null に設定する。

  5. referenceNode が null である場合は parentrange開始ノードとし、 それ以外の場合は referenceNodeとする。

  6. nodeparentreferenceNode、および « » を指定して挿入前の妥当性を確保する

  7. range開始ノードText ノードである場合、 referenceNode を、そのノードを range開始オフセット分割した結果に設定する。

  8. nodereferenceNode である場合、referenceNode をその 直後の兄弟に設定する。

  9. nodeが null でない場合、 node除去する

  10. referenceNode が null である場合は newOffsetparent長さとし、 それ以外の場合は referenceNodeインデックスとする。

  11. nodeDocumentFragment ノードである場合は、 newOffsetnode長さだけ増加させ、 それ以外の場合は 1 増加させる。

  12. nodeparent 内の referenceNode の前に 事前挿入する

  13. range折りたたまれている場合、range終了を (parent, newOffset)に設定する。

insertNode(node) メソッドの手順は、 nodethis挿入することである。

surroundContents(newParent) メソッドの 手順は次のとおりである:

  1. Text ではない ノードthis部分的に包含されている場合は、 "InvalidStateError" DOMExceptionスローする

  2. newParentDocumentDocumentType、 または DocumentFragment ノードである場合は、 "InvalidNodeTypeError" DOMExceptionスローする

    歴史的な理由により、CharacterData ノードはここでは 検査されず、副作用として後でスローすることになる。

  3. fragmentthis抽出した結果とする。

  4. newParentを持つ場合、 newParent 内ですべてを null に置換する

  5. newParentthis挿入する

  6. fragmentnewParent付加する

  7. this 内で newParent選択する

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. node文書型である場合は、"InvalidNodeTypeError" DOMExceptionスローする

  3. offsetnode長さより大きい場合は、 "IndexSizeError" DOMExceptionスローする

  4. node, offset)が開始より であるか、 終了よりである場合は、 false を返す。

  5. true を返す。

comparePoint(node, offset) メソッドの手順は次のとおりである:

  1. nodeルートthisルート ではない場合は、"WrongDocumentError" DOMExceptionスローする

  2. node文書型である場合は、"InvalidNodeTypeError" DOMExceptionスローする

  3. offsetnode長さより大きい場合は、 "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. string を空文字列とする。

  2. this開始ノードthis終了ノードであり、 それが Text ノードである場合、 その Text ノードデータのうち、 this開始オフセットから始まり、 this終了オフセットで終わる部分文字列を返す。

  3. this開始ノードText ノードである場合、 そのノードデータのうち、this開始オフセットから末尾までの部分文字列を string に付加する。

  4. this包含されているすべての Text ノードデータツリー 順連結したものを、string に付加する。

  5. this終了ノードText ノードである場合、 そのノードデータの先頭から this終了オフセットまでの部分文字列を string に付加する。

  6. string を返す。


createContextualFragment()getClientRects()、 および getBoundingClientRect() メソッドは、他の仕様で定義されている。 [DOM-Parsing] [CSSOM-VIEW]

6. 走査

NodeIterator および TreeWalker オブジェクトは、ノード ツリーをフィルター処理し、 走査するために使用できる。

NodeIterator および TreeWalker オブジェクトには、再帰的な呼び出しを避けるため、関連付けられたブール値 アクティブであるがある。これは 初期状態では false である。

NodeIterator および TreeWalker オブジェクトには、関連付けられた ルートノード)、 whatToShow(ビットマスク)、および フィルター(コールバック)もある。

NodeIterator または TreeWalker オブジェクト traverser 内のノード nodeフィルター処理するには:

  1. traverserアクティブであるが true である場合は、 "InvalidStateError" DOMException をスローする。

  2. nnodenodeType 属性値 − 1 とする。

  3. traverserwhatToShown番目のビット(0 を最下位ビットとする)が設定されていない場合は、 FILTER_SKIP を返す。

  4. traverserフィルターが null である場合は、 FILTER_ACCEPT を返す。

  5. traverserアクティブであるを true に設定する。

  6. result を、traverserフィルター、"acceptNode"、および « node » を使用してユーザーオブジェクトの演算を呼び出した 返値とする。これが例外をスローした場合は、traverserアクティブであるを false に設定し、その例外を 再スローする。

  7. traverserアクティブであるを false に設定する。

  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 オブジェクトは、Document オブジェクトの createNodeIterator() メソッドを使用して作成できる。

NodeIterator オブジェクトには、関連付けられた イテレーターコレクションがあり、これは NodeIterator オブジェクトのルートを根とし、その フィルターが任意のノードに一致する コレクションである。

ノードポインターは、 ノードノード)と 前方ポインター(ブール値)から構成される タプルである。

NodeIterator オブジェクトには、関連付けられた参照ノードポインター)と候補参照(null または ノードポインターであり、初期状態では null)もある。

前述したように、NodeIterator オブジェクトには、関連付けられた アクティブ であるルートwhatToShow、および フィルターもある。

NodeIterator オブジェクト nodeIteratorノード toBeRemovedNode が与えられたときの、NodeIterator の除去前手順は、 次のとおりである:

  1. nodeIterator参照を、nodeIterator参照nodeIterator、および toBeRemovedNode を指定して ノードポインターを調整した結果に設定する。

  2. nodeIterator候補参照が null でない場合、 nodeIterator候補参照を、nodeIterator候補参照nodeIterator、および toBeRemovedNode を指定して ノードポインターを調整した結果に設定する。


ノードポインター nodePointerNodeIterator オブジェクト nodeIterator、およびノード toBeRemovedNode が与えられたとき、ノードポインターを調整するには、次の手順を実行する。 これらはノードポインターを返す。

  1. toBeRemovedNodenodePointerノード包括的祖先でないか、 toBeRemovedNodenodeIteratorルート包括的祖先である場合は、 nodePointer を返す。

  2. nodePointer前方ポインターが true である場合:

    1. next を、toBeRemovedNode の後にある最初の 後続 ノードのうち、 nodeIteratorルート包括的子孫であり、かつ toBeRemovedNode包括的子孫ではないものとする。 そのようなノードが存在しない場合は null とする。

    2. next が null でない場合は、(next, true)を返す。

  3. newNode を、toBeRemovedNode直前の兄弟が null である場合は toBeRemovedNodeとし、それ以外の場合は toBeRemovedNode直前の兄弟包括的子孫のうち、 ツリー順で最後に現れるものとする。

  4. newNode, false)を返す。


root の取得手順は、 thisルートを返すことである。

referenceNode の取得手順は、 this参照ノードを返すことである。

pointerBeforeReferenceNode の取得手順は、this参照前方ポインターを返すことである。

whatToShow の取得手順は、 thiswhatToShowを返すことである。

filter の取得手順は、 thisフィルターを返すことである。

NodeIterator オブジェクト iterator と、"next" または "previous" の type が与えられたとき、走査するには:

  1. iterator候補参照を、 iterator参照に設定する。

  2. result を null とする。

  3. true の間:

    1. type が "next" である場合:

      1. iterator候補参照前方ポインターが false である場合:

        1. following を、iterator候補 参照ノード後続する、最初の ノードで、 iteratorイテレーターコレクション内にあるものとする。 そのような ノードがない場合は、 中断する

        2. iterator候補 参照を (following, false)に設定する。

      2. それ以外の場合、iterator候補参照を (iterator候補参照ノード, false)に設定する。

    2. それ以外の場合:

      1. iterator候補参照前方ポインターが true である場合:

        1. preceding を、iterator候補 参照ノード先行する、最初の ノードで、 iteratorイテレーターコレクション内にあるものとする。 そのような ノードがない場合は、 中断する

        2. iterator候補 参照を (preceding, true)に設定する。

      2. それ以外の場合、iterator候補参照を (iterator候補参照ノード, true)に設定する。

    3. nodeiterator候補参照ノードとする。

    4. filterResult を、iterator 内の nodeフィルター処理した結果とする。 これが例外をスローした場合は、iterator候補参照を null に設定し、 その例外を再スローする。

    5. filterResultFILTER_ACCEPT である場合:

      1. iterator参照iterator候補参照に設定する。

      2. resultnode に設定する。

      3. 中断する

  4. iterator候補参照を null に設定する。

  5. result を返す。

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 オブジェクトは、Document オブジェクトの createTreeWalker() メソッドを使用して作成できる。

TreeWalker オブジェクトには、関連付けられた現在のノードノード)がある。

前述したように、TreeWalker オブジェクトには、関連付けられた ルートwhatToShow、およびフィルターもある。

root の取得手順は、 thisルートを返すことである。

whatToShow の取得手順は、 thiswhatToShowを返すことである。

filter の取得手順は、 thisフィルターを返すことである。

currentNode の取得手順は、 this現在のノードを返すことである。

currentNode の設定手順は、this現在のノードを 与えられた値に設定することである。


parentNode() メソッドの手順は次のとおりである:

  1. nodethis現在のノードとする。

  2. node が null ではなく、かつthisルートでない間:

    1. nodenodeに設定する。

    2. node が null ではなく、フィルター処理する nodethis 内で行った結果が FILTER_ACCEPT である場合、this現在のノードnode に設定し、 node を返す。

  3. null を返す。

TreeWalker オブジェクト walker と、"first" または "last" の type が与えられたとき、子を走査するには:

  1. nodewalker現在のノードとする。

  2. type が "first" である場合は nodenode最初の子に設定し、それ以外の場合は node最後の子に設定する。

  3. node が null でない間:

    1. result を、walker 内の nodeフィルター処理した 結果とする。

    2. resultFILTER_ACCEPT である場合、walker現在のノードnode に設定し、 node を返す。

    3. resultFILTER_SKIP である場合:

      1. type が "first" である場合は childnode最初の子とし、それ以外の場合は node最後の 子とする。

      2. child が null でない場合、nodechild に設定し、 続行する

    4. node が null でない間:

      1. type が "first" である場合は siblingnode直後の兄弟とし、 それ以外の場合は node直前の兄弟とする。

      2. sibling が null でない場合、nodesibling に設定して 中断する

      3. parentnodeとする。

      4. parent が null、walkerルート、または walker現在のノードである場合は、null を返す。

      5. nodeparent に設定する。

  4. null を返す。

firstChild() メソッドの手順は、 子を走査することであり、this と "first" を使用する。

lastChild() メソッドの手順は、 子を走査することであり、this と "last" を使用する。

TreeWalker オブジェクト walker と、"next" または "previous" の type が与えられたとき、兄弟を走査するには:

  1. nodewalker現在のノードとする。

  2. nodeルートである場合は、null を返す。

  3. true の間:

    1. type が "next" である場合は siblingnode直後の 兄弟とし、それ以外の場合は node直前の兄弟とする。

    2. sibling が null でない間:

      1. nodesibling に設定する。

      2. result を、walker 内の nodeフィルター処理した 結果とする。

      3. resultFILTER_ACCEPT である場合、walker現在のノードnode に設定し、 node を返す。

      4. type が "next" である場合は siblingnode最初の子に設定し、 それ以外の場合は node最後の子に設定する。

      5. resultFILTER_REJECT であるか、sibling が null である場合、 type が "next" であれば siblingnode直後の兄弟に設定し、それ以外の場合は node直前の兄弟に設定する。

    3. nodenodeに設定する。

    4. node が null または walkerルートである場合、 null を返す。

    5. walker 内の nodeフィルター処理した返値が FILTER_ACCEPT である場合は、null を返す。

nextSibling() メソッドの手順は、 兄弟を走査することであり、this と "next" を使用する。

previousSibling() メソッドの手順は、 兄弟を走査することであり、this と "previous" を使用する。

previousNode() メソッドの手順は次のとおりである:

  1. nodethis現在のノードとする。

  2. nodethisルートでない間:

    1. siblingnode直前の兄弟とする。

    2. sibling が null でない間:

      1. nodesibling に設定する。

      2. result を、this 内の nodeフィルター処理した 結果とする。

      3. resultFILTER_REJECT ではなく、かつ nodeを持つ間:

        1. nodenode最後の子に設定する。

        2. result を、this 内の nodeフィルター処理した結果に設定する。

      4. resultFILTER_ACCEPT である場合、this現在のノードnode に設定し、 node を返す。

      5. siblingnode直前の兄弟に設定する。

    3. nodethisルートであるか、 nodeが null である場合は、null を返す。

    4. nodenodeに設定する。

    5. this 内の nodeフィルター処理した返値が FILTER_ACCEPT である場合、this現在のノードnode に設定し、node を返す。

  3. null を返す。

nextNode() メソッドの手順は次のとおりである:

  1. nodethis現在のノードとする。

  2. resultFILTER_ACCEPTとする。

  3. true の間:

    1. resultFILTER_REJECT ではなく、かつ nodeを持つ間:

      1. node をその最初の子に設定する。

      2. result を、this 内の nodeフィルター処理した 結果に設定する。

      3. resultFILTER_ACCEPT である場合、this現在のノードnode に設定し、 node を返す。

    2. sibling を null とする。

    3. temporarynode とする。

    4. temporary が null でない間:

      1. temporarythisルートである場合は、null を返す。

      2. siblingtemporary直後の兄弟に設定する。

      3. sibling が null でない場合は、中断する

      4. temporarytemporaryに設定する。

    5. sibling が null である場合は、null を返す。

    6. nodesibling に設定する。

    7. result を、this 内の nodeフィルター処理した 結果に設定する。

    8. resultFILTER_ACCEPT である場合、this現在のノードnode に設定し、 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 オブジェクト set の、指定された token に対する 検証手順は次のとおりである:

  1. set要素および 属性名サポートされるトークンが定義されていない場合は、 TypeErrorスローする

  2. lowercaseToken を、tokenASCII 小文字にしたものとする。

  3. lowercaseToken が、 set要素および属性 名サポートされるトークン に存在する場合は、true を返す。

  4. false を返す。

DOMTokenList オブジェクト set更新手順は次のとおりである:

  1. null、set属性名、および set要素を指定して名前空間およびローカル名により 属性を取得した結果が null であり、かつ setトークン集合が空である場合は、返る。

  2. set要素set属性名、および setトークン 集合に対して順序付き集合シリアライザーを実行した結果を指定して、 属性値を設定する

DOMTokenList オブジェクト setシリアル化手順は、set要素および set属性名を指定して 属性値を取得するを実行した結果を返すことである。


DOMTokenList オブジェクト set には、set要素について、次の属性変更手順がある:

  1. localNameset属性 名であり、 namespace が null であり、かつ value が null である場合は、 トークン集合空にする

  2. それ以外で、localNameset属性名であり、namespace が null である場合、setトークン 集合を、value構文解析した結果に設定する。

DOMTokenList オブジェクト set が作成されたとき:

  1. elementset要素とする。

  2. attributeNameset属性 名とする。

  3. value を、 element および attributeName を指定して属性値を取得した結果とする。

  4. elementattributeNamevaluevalue、および null について 属性変更手順を実行する。

tokenlist . length

トークンの数を返す。

tokenlist . item(index)
tokenlist[index]

インデックス index のトークンを返す。

tokenlist . contains(token)

token が存在する場合は true を返し、それ以外の場合は false を返す。

tokenlist . add(tokens…)

渡されたすべての引数を、すでに存在するものを除いて追加する。

引数のいずれかが空文字列である場合は、"SyntaxError" DOMException をスローする。

引数のいずれかに ASCII 空白が含まれる場合は、"InvalidCharacterError" DOMException をスローする。

tokenlist . remove(tokens…)

渡された引数が存在する場合、それらを除去する。

引数のいずれかが空文字列である場合は、"SyntaxError" DOMException をスローする。

引数のいずれかに ASCII 空白が含まれる場合は、"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 空白が含まれる場合は、"InvalidCharacterError" DOMException をスローする。

tokenlist . supports(token)

token が関連付けられた属性のサポートされるトークンに含まれる場合は true を返す。それ以外の場合は false を返す。

関連付けられた属性にサポートされるトークンが定義されていない場合は、 TypeErrorをスローする。

tokenlist . value

関連付けられた集合を文字列として返す。

関連付けられた属性を変更するために設定できる。

length の取得手順は、 thisトークン集合サイズを返すことである。

オブジェクトのサポートされるプロパティインデックスは、オブジェクトの トークン集合サイズ − 1 までの 0 以上の数である。ただし、トークン集合空 である場合は、 サポートされるプロパティインデックスは存在しない。

item(index) メソッドの手順は次のとおりである:

  1. indexthisトークン 集合サイズ以上である場合は、null を返す。

  2. thisトークン集合[index]を返す。

contains(token) メソッドの手順は、 thisトークン集合[token]が存在する場合は true を返し、それ以外の場合は false を返すことである。

add(tokens…) メソッドの手順は次のとおりである:

  1. tokens の各 token について反復する

    1. token が空文字列である場合は、"SyntaxError" DOMExceptionスローする

    2. tokenASCII 空白が含まれる場合は、"InvalidCharacterError" DOMExceptionスローする

  2. tokens の各 token について反復するtokenthisトークン集合付加する

  3. 更新 手順を実行する。

remove(tokens…) メソッドの手順は次のとおりである:

  1. tokens の各 token について反復する

    1. token が空文字列である場合は、"SyntaxError" DOMExceptionスローする

    2. tokenASCII 空白が含まれる場合は、"InvalidCharacterError" DOMExceptionスローする

  2. tokens の各 token について:tokenthisトークン集合から除去する

  3. 更新手順を実行する。

toggle(token, force) メソッドの手順は次のとおりである:

  1. token が空文字列である場合は、"SyntaxError" DOMExceptionスローする

  2. tokenASCII 空白が含まれる場合は、"InvalidCharacterError" DOMExceptionスローする

  3. thisトークン集合[token]が存在する場合:

    1. force が指定されていないか false である場合、 tokenthisトークン集合から除去し更新手順を実行して false を返す。

    2. true を返す。

  4. それ以外で、force が指定されていないか true である場合、 tokenthisトークン集合付加し更新手順を実行して true を返す。

  5. false を返す。

ウェブ互換性のため、toggle() では、更新手順が常に実行されるとは限らない。

replace(token, newToken) メソッドの手順は次のとおりである:

  1. token または newToken のいずれかが空文字列である場合は、"SyntaxError" DOMExceptionスローする

  2. token または newToken のいずれかにASCII 空白が含まれる場合は、"InvalidCharacterError" DOMExceptionスローする

  3. thisトークン集合token含まない場合は、 false を返す。

  4. thisトークン 集合内の tokennewToken置換する

  5. 更新手順を実行する。

  6. true を返す。

ウェブ互換性のため、replace() では、更新手順が常に実行されるとは限らない。

supports(token) メソッドの手順は次のとおりである:

  1. result を、token を指定して呼び出した検証手順の返値とする。

  2. result を返す。

value の取得手順は、 thisシリアル化手順を実行した結果を返すことである。

value の設定手順は、 this要素について、 this属性名および指定された値を使用して 属性値を設定することである。

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

ブラウザーではクライアント側 XSLT を使用しないでください。ブラウザーの XSLT 実装は メモリ安全性の脆弱性が非常に生じやすく、ウェブプラットフォームは安全な代替手段として JavaScript を使用する方向へ進化してきました。これらの理由により、この機能はウェブプラットフォームから 削除される過程にあります。(これは何年もかかる長いプロセスです。)

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、 Armen Michaeli、 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、 Evgeny Kapun、 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、 Jayson Chen、 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、 Steven Obiajulu、 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. Console標準。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. Encoding標準。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. Infra標準。Living Standard。URL: https://infra.spec.whatwg.org/
[LONG-ANIMATION-FRAMES]
Noam Rosenthal. Long Animation Frames API。URL: https://w3c.github.io/long-animation-frames/
[POINTEREVENTS3]
Patrick Lauke; Robert Flack. ポインターイベント。URL: https://w3c.github.io/pointerevents/
[SELECTORS4]
Elika Etemad; Tab Atkins Jr.. セレクター レベル4。URL: https://drafts.csswg.org/selectors/
[SERVICE-WORKERS]
Monica CHINTALA; Yoshisato Yanagisawa. Service Workers Nightly。URL: https://w3c.github.io/ServiceWorker/
[TOUCH-EVENTS]
Doug Schepers; et al. タッチイベント。URL: https://w3c.github.io/touch-events/
[TRUSTED-TYPES]
Krzysztof Kotowicz. Trusted Types。URL: https://w3c.github.io/trusted-types/dist/spec/
[UIEVENTS]
Xiaoqian Wu. 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(第五版)。2008年11月26日。REC。URL: https://www.w3.org/TR/xml/
[XML-NAMES]
Tim Bray; et al. XMLの名前空間 1.0(第三版)。2009年12月8日。REC。URL: https://www.w3.org/TR/xml-names/
[XML-STYLESHEET]
James Clark; Simon Pieters; Henry Thompson. XML文書へのスタイルシートの関連付け 1.0 (第2版). 2010年10月28日. REC. URL: https://www.w3.org/TR/xml-stylesheet/

参考情報

[CSSOM-VIEW]
Simon Fraser; Emilio Cobos Álvarez. CSSOM ビューモジュール. URL: https://drafts.csswg.org/cssom-view/
[DOM-Level-3-XPath]
Ray Whitmer. ドキュメントオブジェクトモデル (DOM) レベル3 XPath仕様. 2020年11月3日. NOTE. URL: https://www.w3.org/TR/DOM-Level-3-XPath/
[DOM-Parsing]
Travis Leithead. DOMパースおよびシリアライズ. URL: https://w3c.github.io/DOM-Parsing/
[FULLSCREEN]
Philip Jägenstedt. フルスクリーンAPI標準. Living Standard. URL: https://fullscreen.spec.whatwg.org/
[INDEXEDDB]
Nikunj Mehta; et al. インデックス付きデータベースAPI. URL: https://w3c.github.io/IndexedDB/
[XPath]
James Clark; Steven DeRose. XMLパス言語 (XPath) バージョン1.0. 1999年11月16日. REC. URL: https://www.w3.org/TR/xpath-10/
[XSLT]
James Clark. XSL変換 (XSLT) バージョン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(); // historical; 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 boolean serializable;
  readonly attribute SlotAssignmentMode slotAssignment;
  readonly attribute boolean clonable;
  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, (TrustedType or DOMString) value);
  [CEReactions] undefined setAttributeNS(DOMString? namespace, DOMString qualifiedName, (TrustedType or 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;
  boolean serializable = false;
  SlotAssignmentMode slotAssignment = "named";
  boolean clonable = false;
  CustomElementRegistry? customElementRegistry;
};

[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; // historical; 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 {
  constructor(DOMString target, optional DOMString data = "");

  readonly attribute DOMString target;

  boolean hasAttributes();
  sequence<DOMString> getAttributeNames();
  DOMString? getAttribute(DOMString name);
  undefined setAttribute(DOMString name, DOMString value);
  undefined removeAttribute(DOMString name);
  boolean toggleAttribute(DOMString name, optional boolean force);
  boolean hasAttribute(DOMString name);
};
[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?