The define() method of the CustomElementRegistry interface defines a new custom element.
This is an experimental technology
Check the Browser compatibility table carefully before using this in production.
customElements.define(name, constructor, options);
extends. String specifying the name of a built-in element to extend. Used to create a customized built-in element.Void.
The constructors for these elements must extend HTMLElement.
class BasicElement extends HTMLElement {
connectedCallback() {
this.textContent = 'Just a basic custom element.';
}
}
customElements.define('basic-element', BasicElement);
<basic-element><basic-element>
Note: Though defined in the spec, this is not presently supported in browsers.
Besides whatever enhancements we add, the following will otherwise behave like a <button>:
class PlasticButton extends HTMLButtonElement {
constructor() {
super();
this.addEventListener("click", () => {
// Draw some fancy animation effects!
});
}
}
// The "extends" attribute is required for, and only usable by,
// customized built-in-elements
customElements.define("plastic-button", PlasticButton, { extends: "button" });
<!-- This *WILL* work --> <button is="plastic-button">Click Me!</button> <!-- The following autonomous custom element style will *NOT* work because of our definition in JavaScript above using "extends". The element below will thus not gain the above-defined behavior nor be any different from any other unknown HTML element. --> <plastic-button>Click me</plastic-button>
| Specification | Status | Comment |
|---|---|---|
| HTML Living Standard The definition of 'customElements.define()' in that specification. | Living Standard | Initial definition. |
| Feature | Firefox (Gecko) | Chrome | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|
| Basic support | No support[1] | 59.0 | No support | 47.0 | 10.1 |
| Customized built-in elements | No support | No support | No support | No support | No support |
| Feature | Firefox Mobile (Gecko) | Chrome for Android | IE Mobile | Opera Mobile | Safari Mobile |
|---|---|---|---|---|---|
| Basic support | No support | 56.0 | No support | 47.0 | 10.1 |
| Customized built-in elements | No support | 56.0 | No support | 47.0 | No support |
[1] While Firefox does not yet support customElements.define(), it still supports the deprecated document.registerElement().
© 2005–2018 Mozilla Developer Network and individual contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/CustomElementRegistry/define