CustomElementRegistry: метод define()
Базовая Широко поддерживается *
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с января 2020 года.
* Некоторые части этой функции могут иметь различный уровень поддержки.
Метод define() интерфейса CustomElementRegistry добавляет определение пользовательского элемента в реестр пользовательских элементов, сопоставляя его имя с конструктором, который будет использоваться для его создания.
Синтаксис
define(name, constructor) define(name, constructor, options)
Параметры
name-
Имя нового пользовательского элемента. Должно быть валидным именем пользовательского элемента.
constructor-
Конструктор нового пользовательского элемента.
optionsНеобязательно-
Объект, который управляет тем, как определяется элемент. В настоящее время поддерживается один параметр:
extends-
Строка, указывающая имя встроенного элемента для расширения. Используется для создания настраиваемого встроенного элемента.
Возвращаемое значение
Ничего (undefined).
Исключения
-
NotSupportedErrorDOMException -
Выбрасывается, если:
- В
CustomElementRegistryуже есть запись с таким же именем или таким же конструктором (или если он уже определен). - Указан параметр
extendsи он является валидным именем пользовательского элемента - Указан параметр
extends, но элемент, который пытаются расширить, является неизвестным элементом.
- В
-
SyntaxErrorDOMException -
Выбрасывается, если указанное имя не является валидным именем пользовательского элемента.
TypeError-
Выбрасывается, если указанный конструктор не является конструктором.
Описание
Метод define() добавляет определение пользовательского элемента в реестр пользовательских элементов, сопоставляя его имя с конструктором, который будет использоваться для его создания.
Существует два типа пользовательских элементов, которые вы можете создать:
- Автономные пользовательские элементы — это самостоятельные элементы, которые не наследуют от встроенных HTML-элементов.
- Настраиваемые встроенные элементы — это элементы, которые наследуют от и расширяют встроенные HTML-элементы.
Для определения автономного пользовательского элемента, следует опустить параметр options.
Для определения настраиваемого встроенного элемента, необходимо указать параметр options с свойством extends установленным в имя встроенного элемента, который вы расширяете, и это должно соответствовать интерфейсу, от которого наследуется определение вашего пользовательского элемента. Например, для настройки элемента <p>, вы должны передать {extends: "p"} в define(), и определение класса вашего элемента должно наследоваться от HTMLParagraphElement.
Ва́лидные имена пользовательских элементов
Имена пользовательских элементов должны:
- начинаться с строчной буквы латинского алфавита (a-z)
- содержать дефис
- не содержать прописных букв латинского алфавита
- не содержать определенные другие символы, как указано в разделе валидных имен пользовательских элементов в спецификации Web Components
- не быть одним из следующих:
- "annotation-xml"
- "color-profile"
- "font-face"
- "font-face-src"
- "font-face-uri"
- "font-face-format"
- "font-face-name"
- "missing-glyph"
Примеры
Определение автономного пользовательского элемента
Следующий класс реализует минимальный автономный пользовательский элемент:
class MyAutonomousElement extends HTMLElement {
constructor() {
super();
}
}
Этот элемент ничего не делает: реальный автономный элемент реализует свою функциональность в своём конструкторе и в жизненном цикле, которые предоставляет стандарт. См. Реализация пользовательского элемента в нашем руководстве по работе с пользовательскими элементами.
Однако, вышеприведённое определение класса удовлетворяет требованиям метода define(), поэтому мы можем определить его следующим кодом:
customElements.define("my-autonomous-element", MyAutonomousElement);
Затем мы можем использовать его на HTML-странице так:
<my-autonomous-element>Element contents</my-autonomous-element>
Определение настраиваемого встроенного элемента
Следующий класс реализует настраиваемый встроенный элемент:
class MyCustomizedBuiltInElement extends HTMLParagraphElement {
constructor() {
super();
}
}
Этот элемент расширяет встроенный элемент <p>.
В этом минимальном примере элемент не реализует никаких настроек, поэтому он будет вести себя так же, как обычный элемент <p>. Однако, он удовлетворяет требованиям define(), поэтому мы можем определить его так:
customElements.define(
"my-customized-built-in-element",
MyCustomizedBuiltInElement,
{
extends: "p",
},
);
Затем мы можем использовать его на HTML-странице так:
<p is="my-customized-built-in-element"></p>
Спецификации
| Спецификация |
|---|
| HTML # dom-customelementregistry-define-dev |
Совместимость с браузерами
| Рабочие столы | Мобильные | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari в iOS | Samsung Internet | WebView Android | |
define |
54 | 79 | 63 | 41 | 10.1 | 54 | 63 | 41 | 10.3 | 6.0 | 54 |
disabledFeatures_static_property |
77 | 79 | 92 | 64 | Нет | 77 | 92 | 55 | Нет | 12.0 | 77 |
См. также
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/CustomElementRegistry/define