DOM | Интерфейс Element

DOM | Интерфейс Element

IDL

[Exposed=Window]
interface Element : Node {
   readonly attribute DOMString? namespaceURI;
   readonly attribute DOMString? prefix;
   readonly attribute DOMString localName;
   readonly attribute DOMString tagName;

   [CEReactions] attribute DOMString id;
   [CEReactions] attribute DOMString className;
   [SameObject, PutForwards=value] readonly attribute DOMTokenList classList;
   [CEReactions, Unscopable] attribute DOMString slot;

   boolean hasAttributes();
   [SameObject] readonly attribute NamedNodeMap attributes;
   sequence<DOMString> getAttributeNames();
   DOMString? getAttribute(DOMString qualifiedName);
   DOMString? getAttributeNS(DOMString? namespace, DOMString localName);
   [CEReactions] undefined setAttribute(DOMString qualifiedName, DOMString value);
   [CEReactions] undefined setAttributeNS(DOMString? namespace, DOMString qualifiedName, DOMString value);
   [CEReactions] undefined removeAttribute(DOMString qualifiedName);
   [CEReactions] undefined removeAttributeNS(DOMString? namespace, DOMString localName);
   [CEReactions] boolean toggleAttribute(DOMString qualifiedName, optional boolean force);
   boolean hasAttribute(DOMString qualifiedName);
   boolean hasAttributeNS(DOMString? namespace, DOMString localName);

   Attr? getAttributeNode(DOMString qualifiedName);
   Attr? getAttributeNodeNS(DOMString? namespace, DOMString localName);
   [CEReactions] Attr? setAttributeNode(Attr attr);
   [CEReactions] Attr? setAttributeNodeNS(Attr attr);
   [CEReactions] Attr removeAttributeNode(Attr attr);

   ShadowRoot attachShadow(ShadowRootInit init);
   readonly attribute ShadowRoot? shadowRoot;

   Element? closest(DOMString selectors);
   boolean matches(DOMString selectors);
   boolean webkitMatchesSelector(DOMString selectors); // исторический псевдоним .matches

   HTMLCollection getElementsByTagName(DOMString qualifiedName);
   HTMLCollection getElementsByTagNameNS(DOMString? namespace, DOMString localName);
   HTMLCollection getElementsByClassName(DOMString classNames);

   [CEReactions] Element? insertAdjacentElement(DOMString where, Element element); // исторический
   undefined insertAdjacentText(DOMString where, DOMString data); // исторический
};

dictionary ShadowRootInit {
   required ShadowRootMode mode;
   boolean delegatesFocus = false;
};

 

Узлы Element называются просто «элементами» (elements).

Элементы имеют связанное «пространство имен» (namespace), «префикс пространства имен» (namespace prefix), «локальное имя» (local name), «состояние настраиваемого элемента» (custom element state), «определение настраиваемого элемента» (custom element definition),  «is значение» (value). Когда элемент создаётся, все эти значения инициализируются.

Состояние настраиваемого элемента элемента может быть одним из следующих: «undefined«, «failed«, «uncustomized«, «precustomized«, or «custom» («Не определено», «Не выполнено», «Не настроено», «Предварительно настроено» или «Пользовательское»). Элемент, чье состояние настраиваемого элемента является «uncustomized» или «custom«, называется «определённым» (defined). Элемент, чье состояние настраиваемого элемента является «custom«, называется «настраиваемым» (custom).

Примечание!

Независимо от того, определен ли элемент, используется для определения поведения псевдокласса :defined. Независимо от того, является ли элемент настраиваемым, используется для определения поведения алгоритмов мутации. Состояния «failed» и «precustomized» используются для того, чтобы гарантировать, что если конструктор настраиваемого элемента не будет правильно выполняться в первый раз, он не будет выполнен снова при обновлении.

 

Пример

Следующий код иллюстрирует элементы в каждом из этих четырех состояний:

<!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" (not defined, not custom) -->
<sw-han></sw-han>
<p is="sw-luke"></p>
<p is="asdf"></p>

<!-- "failed" (not defined, not custom) -->
<sw-kylo></sw-kylo>

<!-- "uncustomized" (defined, not custom) -->
<p></p>
<asdf></asdf>

<!-- "custom" (defined, custom) -->
<sw-rey></sw-rey>
<p is="sw-finn"></p>

 

Элементы также имеют связанный «теневой корень» (shadow root) (null или теневой корень). Это значение равно null, если не указано иное. Элемент является «теневым хостом» (shadow host), если его теневой корень не равен null.

«Полное имя» (qualified name) элемента — это его локальное имя, если его префикс пространства имен равен null, и его префикс пространства имен, за которым следует двоеточие «:», за которым следует его локальное имя, в противном случае.

«Полное имя в верхнем регистре в формате HTML» (HTML-uppercased qualified name) элемента является возвращаемым значением следующих шагов:

1. Пусть qualifiedName будет полным именем этого this.
2. Если этот this находится в пространстве имен HTML, а его узловой документ является HTML-документом, тогда установите для qualifiedName значение qualifiedName в верхнем регистре ASCII.
3. Верните qualifiedName

Примечание!

Пользовательские агенты могут оптимизировать полное имя и полное имя в верхнем регистре HTML, сохраняя их во внутренних слотах.

 

Чтобы «создать элемент» (create an element), учитывая document, localName, namespace и необязательный prefix, is и флаг синхронных настраиваемых элементов (synchronous custom elements flag), выполните следующие действия:

1. Если prefix не был указан, пусть prefix будет null.
2. Если is не задано, пусть is будет null.
3. Пусть результат result будет нулевым.
4. Пусть определение definition будет результатом поиска определения настраиваемого элемента с учетом документа document, пространства имен namespace, локального имени localName и is.
5. Если definition не равно null и имя definition не совпадает с его локальным именем (т. е. definition представляет собой настраиваемый встроенный элемент), тогда:
   1. Пусть interface будет интерфейсом элемента для localName и пространства имен HTML.
   2. Установить результат result для нового элемента, который реализует interface, без атрибутов, пространство имен установлено на пространство имен HTML, префикс пространства имен установлен на prefix, локальное имя установлено на localName, состояние настраиваемого элемента установлено на "undefined", определение настраиваемого элемента установлено на null, значение is установлено на is, а для документа узла установлено значение document.
   3. Если установлен флаг синхронных настраиваемых элементов (synchronous custom elements flag), запустите этот шаг, перехватывая любые исключения:
         1. Обновите элемент element, используя определение definition.
      Если этот шаг вызвал исключение, то:
         1. Сообщите об исключении.
         2. Установите состояние настраиваемого элемента result как "failed" ("сбой").
   4. В противном случае поставьте в очередь реакцию обновления настраиваемого элемента с учетом результата result и определения definition.
6. В противном случае, если definition не равно null, тогда:
   1. Если установлен флаг синхронных настраиваемых элементов (synchronous custom elements flag), выполните следующие действия, перехватив любые исключения:
      1. Пусть C будет конструктором definition.
      2. Установите result равным результату построения C без аргументов.
      3. Утверждение: инициализируются состояние настраиваемого элемента result и определение настраиваемого элемента.
      4. Утверждение: пространство имен результата result - это пространство имен HTML.

Примечание!

IDL обеспечивает, что результатом является объект HTMLElement, который использует пространство имен HTML.

      5. Если список атрибутов result не пуст, то бросить исключение DOMException "NotSupportedError".
      6. Если у result есть дети, выбросить исключение DOMException "NotSupportedError".
      7. Если родитель result не равен null, выбросить исключение DOMException "NotSupportedError".
      8. Если документ узла result не является document, выбросить исключение DOMException "NotSupportedError".
      9. Если локальное имя результата не равно localName, выбросить исключение DOMException "NotSupportedError".
      10. Установите префикс пространства имен result на prefix.
      11. Установите для is значения result значение null.
   Если какой-либо из этих шагов вызвал исключение, то:
      1. Сообщите об исключении.
      2. Установить result для нового элемента, который реализует интерфейс HTMLUnknownElement, без атрибутов, пространство имен установлено на пространство имен HTML, префикс пространства имен установлен на prefix, локальное имя установлено на localName, состояние настраиваемого элемента установлено на "failed" ("сбой"), определение настраиваемого элемента установлено на null , is значение имеет значение null, а документ узла имеет значение document.
   2. Иначе:
      1. Установить result для нового элемента, который реализует интерфейс HTMLElement, без атрибутов, пространство имен установлено на пространство имен HTML, префикс пространства имен установлен на prefix, локальное имя установлено на localName, состояние настраиваемого элемента установлено на "undefined", определение настраиваемого элемента установлено на null , is значение имеет значение null, а документ узла имеет значение document.
      2. Поставить в очередь реакцию обновления настраиваемого элемента с учетом результата result и определения definition.
7. Иначе
   1. Пусть interface будет интерфейсом элемента для localName и namespace.
   2. Установить result для нового элемента, который реализует interface, без атрибутов, пространство имен установлено на namespace, префикс пространства имен установлен на prefix, локальное имя установлено на localName, состояние настраиваемого элемента установлено на "uncustomized"», определение настраиваемого элемента установлено на null, is значение имеет значение is, а документ узла имеет значение document.
   3. Если namespace является пространством имен HTML и либо localName является допустимым именем настраиваемого элемента, либо is имеет значение, отличное от NULL, установите для состояния настраиваемого элемента result значение "undefined".
8. Вернуть result

 

У элементов также есть «список атрибутов» (attribute list), который представляет собой список, представленный через NamedNodeMap. Если элемент не указан явно, его список атрибутов пуст.

Элемент «имеет» (has) атрибут A, если его список атрибутов содержит A.

Эта и другие спецификации могут определять «шаги изменения атрибутов» (attribute change steps) для элементов. Алгоритму передаются element, localName, oldValue, value и namespace.

Чтобы «обработать изменения атрибутов» (handle attribute changes) для атрибута attribute с element, oldValue и newValue, выполните следующие действия:

1. Поставить в очередь запись мутации "attributes" для element с локальным именем attribute, пространством имен attribute, oldValue, «», «», null и null.
2. Если element является настраиваемым, то поставьте в очередь реакцию обратного вызова настраиваемого элемента с element, именем обратного вызова "attributeChangedCallback" и списком аргументов, содержащим локальное имя attribute, oldValue, newValue и пространство имен attribute.
3. Выполните шаги по изменению атрибута с element, локальным именем attribute, oldValue, newValue и пространством имен attribute.

 

Чтобы «изменить» (change) атрибут attribute на value, выполните следующие действия:

1. Обработайте изменение атрибута для attribute с помощью элемента attribute, значения attribute и value.
2. Установите для значения attribute  - value.

 

Чтобы «добавить» (append) атрибут attribute к элементу element, выполните следующие действия:

1. Обрабатывать изменения атрибута для attribute с element, null и значения attribute.
2. Добавить attribute в список атрибутов element.
3. Установите элемент attribute на element.

 

Чтобы «удалить» (remove) атрибут attribute, выполните следующие действия:

1. Обработайте изменения атрибута для attribute с помощью элемента attribute, значения attribute и null.
2. Удалите attribute из списка атрибутов элемента attribute.
3. Установите для элемента attribute значение null.

 

Чтобы «заменить» (replace) атрибут oldAttr на атрибут newAttr, выполните следующие действия:

1. Обработайте изменения атрибута oldAttr с помощью элемента oldAttr, значения oldAttr и значения newAttr.
2. Замените oldAttr на newAttr в списке атрибутов элемента oldAttr.
3. Установите элемент newAttr на элемент oldAttr.
4. Установите для элемента oldAttr значение null.

 

Чтобы «получить атрибут по имени» (get an attribute by name) с учетом qualifiedName и элемента element, выполните следующие действия:

1. Если element находится в пространстве имен HTML, а его узловой документ является HTML-документом, тогда установите для qualifiedName значение qualifiedName в нижнем регистре ASCII.
2. Вернуть первый атрибут в списке атрибутов элемента element, полное имя которого - qualifiedName, в противном случае - null.

Чтобы «получить атрибут по пространству имен и локальному имени» (get an attribute by namespace and local name) с учетом namespace, localName и элемента element, выполните следующие действия:

1. Если namespace является пустой строкой, установите для нее значение null.
2. Вернуть атрибут в списке атрибутов element, пространство имен которого - namespace, а локальное имя - localName, если есть, и null в противном случае.

Чтобы «получить значение атрибута» (get an attribute value) с учетом элемента element, localName и, возможно, namespace (null, если не указано иное), выполните следующие действия:

1. Пусть attr будет результатом получения атрибута из заданного namespace, localName и element.
2. Если attr имеет значение null, вернуть пустую строку.
3. Вернуть значение attr.

Чтобы «установить атрибут» (set an attribute) с учетом attr и element, выполните следующие действия:

1. Если элемент attr не является ни null, ни element, генерировать исключение DOMException "InUseAttributeError".
2. Пусть oldAttr будет результатом получения атрибута, заданного пространством имен attr, локальным именем attr и element.
3. Если oldAttr - это attr, верните attr.
4. Если oldAttr не равен null, замените oldAttr на attr.
5. В противном случае добавьте attr к элементу element.
6. Верните oldAttr.

Чтобы «установить значение атрибута» (set an attribute value) для элемента element, используя localName и значение value, а также необязательный префикс prefix и пространство имен namespace, выполните следующие действия:

1. Если префикс prefix не указан, установите для него значение null.
2. Если пространство имен namespace не указано, установите для него значение null.
3. Пусть attribute будет результатом получения атрибута с заданным namespace, localName и element.
4. Если attribute имеет значение null, создайте атрибут, пространство имен которого - namespace, префикс пространства имен - prefix, локальное имя - localName, значение - value, а документ узла - документ узла element, затем добавьте этот атрибут к элементу element и затем верните его.
5. Измените attribute на value.

 

Чтобы «удалить атрибут по имени» (remove an attribute by name), заданному qualifiedName и элементом element, выполните следующие действия:

1. Пусть attr будет результатом получения атрибута с заданным именем qualifiedName и element.
2. Если attr не равно null, удалите attr.
3. Вернуть attr.

Чтобы «удалить атрибут по пространству имен и локальному имени» (remove an attribute by namespace and local name) с учетом namespace, localName и элемента element, выполните следующие действия:

1. Пусть attr будет результатом получения атрибута из заданного namespace, localName и element.
2. Если attr не равно null, удалите attr.
3. Вернуть attr.

 

Элемент может иметь связанный «уникальный идентификатор» (unique identifier — ID)

Примечание!

Исторически элементы могли иметь несколько идентификаторов, например, с помощью атрибута id HTML  и DTD. Эта спецификация делает идентификаторы ID концепцией DOM и позволяет использовать только один элемент для каждого элемента, задаваемый атрибутом id.

Чтобы обновить идентификатор элемента, выполните следующие шаги по изменению атрибута:

1. Если localName имеет значение id, namespace равно NULL, а value равно NULL или пустая строка, идентификатор element не устанавливается.
2. В противном случае, если localName имеет значение id, namespace равно null, тогда установите для идентификатора element значение value.

Примечание!

Хотя эта спецификация определяет требования к атрибутам class, id и slot для любого элемента, она не делает никаких заявлений относительно того, соответствует ли их использование требованиям или нет.

 

Родитель узла типа Element известен как «родительский элемент» (parent element). Если у узла есть родитель другого типа, его родительский элемент имеет значение NULL.

 

Для веб-разработчиков (не нормативно)

namespace = element . namespaceURI

Возвращает пространство имен.

prefix = element . prefix

Возвращает префикс пространства имен.

localName = element . localName

Возвращает локальное имя.

qualifiedName = element . tagName

Возвращает полное имя в верхнем регистре HTML.

 

Получатель атрибута namespaceURI должен возвращать пространство имен этого this.

Получатель атрибута prefix должен возвращать префикс пространства имен этого this.

Получатель атрибута localName должен возвращать локальное имя этого this.

Получатель атрибута tagName должен возвращать полное имя HTML в верхнем регистре этого this.

 

Для веб-разработчиков (не нормативно)

element . id [ = value ]

Возвращает значение содержимого атрибута «id», элемента element. Можно настроить, чтобы изменить это.

element . className [ = value ]

Возвращает значение содержимого атрибута «class«, элемента element. Можно настроить, чтобы изменить это.

element . classList

Позволяет управлять содержимым атрибута «class«, элемента element как набором токенов, разделенных пробелами, через объект DOMTokenList.

element . slot [ = value ]

Возвращает значение содержимого атрибута «slot«, элемента element. Можно настроить, чтобы изменить это.

 

Атрибуты IDL, которые определены для «отражения» (reflect) содержимого атрибута с заданным именем name, должны иметь средства получения и установки, которые выполняют следующие шаги:

Получатель (getter)

Вернуть результат выполнения получения значение атрибута с учетом этого this и имени name.

Установщик (setter)

Установите значение атрибута для этого this, используя имя name и заданное значение.

Атрибут id должен отражать содержимое атрибута  «id«.

Атрибут className должен отражать содержимое атрибута «class«.

Получатель атрибута classList должен возвращать объект DOMTokenList, чьим связанным элементом является this, а локальное имя связанного атрибута — «class«. Набор токенов этого конкретного объекта DOMTokenList также известен как «классы» (classes) элемента.

Атрибут slot должен отражать содержимое атрибута «slot«.

Примечание!

id, class и slot по сути являются суперглобальными атрибутами, поскольку они могут появляться в любом элементе, независимо от пространства имен этого элемента.

 

Для веб-разработчиков (не нормативно)

element . hasAttributes()

Возвращает true, если элемент element имеет атрибуты, и 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.

Возвращает истину (true), если теперь присутствует qualifiedName, и ложь в противном случае.

element . hasAttribute(qualifiedName)

Возвращает истину (true), если элемент element имеет атрибут, чьё полное имя является qualifiedName, и ложь (false) в противном случае.

element . hasAttributeNS(namespace, localName)

Возвращает истину (true), если элемент element имеет атрибут, чьё пространство именnamespace, а локальное имяlocalName.

 

Метод hasAttributes() при вызове должен возвращать false, если этот список атрибутов пуст, и true в противном случае.

Получатель атрибута attributes должен возвращать связанный NamedNodeMap.

Метод getAttributeNames() при вызове должен возвращать полные имена атрибутов в списке атрибутов этого this по порядку, а в противном случае — новый список.

Примечание!

Их уникальность не гарантируется.

При вызове метода getAttribute(qualifiedName) необходимо выполнить следующие действия:

1. Пусть attr будет результатом получения атрибута с qualifiedName и this.
2. Если attr имеет значение null, вернуть null.
3. Вернуть значение attr.

При вызове метода getAttributeNS(namespace, localName) необходимо выполнить следующие действия:

1. Пусть attr будет результатом получения атрибута с заданным namespace, localName и this.
2. Если attr имеет значение null, вернуть null.
3. Вернуть значение attr.

Метод setAttribute(qualifiedName, value) при вызове должен выполнить следующие шаги:

1. Если qualifiedName не совпадает с производством Name в XML, генерируется исключение DOMException «InvalidCharacterError».
2. Если this находится в пространстве имен HTML, а его документ узла является HTML-документом, тогда установите для qualifiedName значение qualifiedName в нижнем регистре ASCII.
3. Пусть attribute будет первым атрибутом в списке атрибутов этого this, чьё полное имя будет qualifiedName, в противном случае - null.
4. Если attribute имеет значение NULL, создайте атрибут, локальное имя которого - qualifiedName, значение - value, а документ узла - документ узла этого this, затем добавьте этот атрибут к this и затем вернитесь.
5. Измените attribute на value.

При вызове метода setAttributeNS(namespace, qualifiedName, value) необходимо выполнить следующие шаги:

1. Пусть namespace, prefix и localName будут результатом передачи namespace и qualifiedName для проверки и извлечения.
2. Установите значение атрибута для этого this, используя localName, value, а также prefix и namespace.

Метод removeAttribute(qualifiedName) при вызове должен удалить атрибут с qualifiedName и this, а затем вернуть значение undefined.

Метод removeAttributeNS(namespace, localName) при вызове должен удалить атрибут, заданный namespace, localName и this, а затем вернуть значение undefined.

При вызове метода hasAttribute(qualifiedName) необходимо выполнить следующие действия:

1. Если this находится в пространстве имен HTML, а его документ узла является HTML-документом, тогда установите для qualifiedName значение qualifiedName в нижнем регистре ASCII.
2. Верните истину (true), если у этого this имеется атрибут, чьё полное имя - qualifiedName, и ложь (false) в противном случае.

При вызове метода toggleAttribute(qualifiedName, force) необходимо выполнить следующие действия:

1. Если qualifiedName не совпадает с производством Name в XML, генерируется исключение DOMException «InvalidCharacterError».
2. Если this находится в пространстве имен HTML, а его документ узла является HTML-документом, тогда установите для qualifiedName значение qualifiedName в нижнем регистре ASCII.
3. Пусть attribute будет первым атрибутом в списке атрибутов этого this, чьё полное имя будет qualifiedName, в противном случае - null.
4. Если attribute равен null, то:
   1. Если force не задан или имеет значение true, создайте атрибут, локальное имя которого - qualifiedName, значение - это пустая строка, а документ узла - это документ узла этого this, затем добавьте этот атрибут к this и верните true.
   2. Вернуть false.
5. В противном случае, если force не задано или имеет значение false, удалите атрибут, заданный qualifiedName и this, а затем верните false.
6. Верните истину - true.

При вызове метода hasAttributeNS(namespace, localName) необходимо выполнить следующие действия:

1. Если namespace является пустой строкой, установите для нее значение null.
2. Верните true, если this имеет атрибут, пространство имен которого - namespace, а локальное имя - localName, и false в противном случае.

 

Метод getAttributeNode(qualifiedName) при вызове должен возвращать результат получения атрибута с заданным qualifiedName и this.

Метод getAttributeNodeNS(namespace, localName) при вызове должен возвращать результат получения атрибута с заданным namespace, localName и this.

Методы setAttributeNode(attr) и setAttributeNodeNS(attr) при вызове должны возвращать результат установки атрибута с данным attr и this.

При вызове метода removeAttributeNode(attr) необходимо выполнить следующие действия:

1. Если список атрибутов этого this не содержит attr, выбросить исключение DOMException "NotFoundError".
2. Удалить attr
3. Вернуть attr

 

Для веб-разработчиков (не нормативно)

var shadow = element . attachShadow(init)

Создает теневой корень для элемента element и возвращает его.

var shadow = element . shadowRoot

Возвращает теневой корень элемента element, если он есть, и если режим теневого корня «open«, и null в противном случае.

 

При вызове метода attachShadow(init) необходимо выполнить следующие действия:

1. Если пространство имен этого this не является пространством имен HTML, выбросить исключение DOMException "NotSupportedError".
2. Если локальное имя этого this не одно из следующих:
      допустимое имя настраиваемого элемента
      "article", "aside", "blockquote", "body", "div", "footer", "h1", "h2", "h3", "h4", "h5", "h6", "header", "main", "nav", "p", "section", "span"
   затем выбросить исключение DOMException "NotSupportedError".
3. Если локальное имя этого this является допустимым именем настраиваемого элемента или is значение этого this не равно null, то:
   1. Пусть definition будет результатом поиска определения настраиваемого элемента по данному документу узла этого this, его пространству имен, его локальному имени и его is значению.
   2. Если definition не равно null, а значение отключенная тень definition является истиной true, то генерируется исключение DOMException "NotSupportedError".
4. Если this является теневым хостом, выбросить исключение DOMException "NotSupportedError".
5. Пусть shadow будет новым теневым корнем, документ узла которого - это документ узла этого this, хост является this, а режим является mode init.
6. Установите фокус делегатов тени shadow на delegatesFocus в init.
7. Если настраиваемое состояние элемента этого this является "precustomized" или "custom", тогда установите для shadow, доступной для внутренних элементов, значение true.
8. Установите теневой корень этого this на shadow.
9. Верните shadow

Получатель атрибута shadowRoot должен выполнить следующие шаги:

1. Пусть тень shadow будет корнем тени этого this.
2. Если тень shadow равна null или ее режим "closed" («закрыт»), то верните null.
3. Верните shadow

 

Для веб-разработчиков (не нормативно)

element . closest(selectors)

Возвращает первого (начиная с элемента element) инклюзивного предка, который соответствует селекторам selectors, в противном случае — null.

element . matches(selectors)

Возвращает true, если сопоставление селекторов selectors с корнем элемента element дает element, и false в противном случае.

 

Метод closest(selectors) при вызове должен выполнить следующие шаги:

1. Пусть s будет результатом синтаксического анализа селектора из selectors. [SELECTORS4]
2. Если s является ошибкой, выбросить исключение DOMException "SyntaxError".
3. Пусть elements будут инклюзивными предками этого this, которые являются элементами в обратном древовидном порядке.
4. Для каждого element в elements, если сопоставляется селектор с элементом, используя s, element и :scope element this возвращает успех, возвращает element. [SELECTORS4]
5. Вернуть null

Методы matches(selectors) и webkitMatchesSelector(selectors) при вызове должны выполнять следующие шаги:

1. Пусть s будет результатом синтаксического анализа селектора из selectors. [SELECTORS4]
2. Если s является ошибкой, выбросить исключение DOMException "SyntaxError".
3. Вернуть true, если результат сопоставления селектора с элементом с использованием s, element и :scope element this возвращает успех, иначе false. [SELECTORS4]

 

Метод getElementsByTagName(qualifiedName) при вызове должен возвращать список элементов с квалифицированным именем qualifiedName для этого this.

Метод getElementsByTagNameNS(namespace, localName) при вызове должен возвращать список элементов с пространством имен namespace и локальным именем localName для этого this.

Метод getElementsByClassName(classNames) при вызове должен возвращать список элементов с именами классов classNames этого this.

 

Чтобы «вставить рядом» (insert adjacent), с элементом element, строкой where и узлом node, выполните шаги, связанные с первым совпадением ASCII без учета регистра для where:

«beforebegin«

Если родитель элемента element равен null, верните null.

Вернуть результат предварительной вставки узла node в родителя элемента element перед элементом element.

«afterbegin«

Вернуть результат предварительной вставки узла node в элемент element перед первым ребёнком элемента element.

«beforeend«

Вернуть результат предварительной вставки узла node в элемент element перед null.

«afterend«

Если родитель элемента element равен null, верните null.

Вернуть результат предварительной вставки узла node в родителя элемента element перед следующим родственником элемента element.

Иначе

Выбросить исключение DOMException «SyntaxError«.

 

Метод insertAdjacentElement(where, element) при вызове должен возвращать результат выполнения вставки рядом, передать this, where и element.

При вызове метода insertAdjacentText(where, data) необходимо выполнить следующие действия:

1. Пусть text будет новым узлом Text, данные которого являются data, а документ узла - документом узла этого this.
2. Выполните вставку рядом, учитывая this, where и text.

 

Примечание!

Этот метод ничего не возвращает, потому что он существовал до того, как мы смогли его спроектировать.

 

Ссылки

DOM стандарт — https://efim360.ru/dom/

Читайте перевод полной версии стандарта «объектной модели документа», чтобы ознакомиться со всеми концепциями и интерфейсами.

DOMLiving Standardhttps://dom.spec.whatwg.org

Читайте официальную документацию живого стандарта «объектной модели документа», чтобы быть в курсе последних изменений.