The CustomElementRegistry interface provides methods for registering custom elements and querying registered elements. To get an instance of it, use the window.customElements property.
Methods
CustomElementRegistry.define()- Defines a new custom element.
CustomElementRegistry.get()- Returns the constuctor for the named custom element, or
undefinedif the custom element is not defined. CustomElementRegistry.whenDefined()- Returns an empty
promisethat resolves when a custom element becomes defined with the given name. If such a custom element is already defined, the returned promise is immediately fulfilled.
Examples
The following code is taken from our word-count-web-component example (see it live also). Note how we use the CustomElementRegistry.define() method to define the custom element after creating its class.
// Create a class for the element
class WordCount extends HTMLParagraphElement {
constructor() {
// Always call super first in constructor
super();
// count words in element's parent element
var wcParent = this.parentNode;
function countWords(node){
var text = node.innerText || node.textContent
return text.split(/\s+/g).length;
}
var count = 'Words: ' + countWords(wcParent);
// Create a shadow root
var shadow = this.attachShadow({mode: 'open'});
// Create text node and add word count to it
var text = document.createElement('span');
text.textContent = count;
// Append it to the shadow root
shadow.appendChild(text);
// Update count when element content changes
setInterval(function() {
var count = 'Words: ' + countWords(wcParent);
text.textContent = count;
}, 200)
}
}
// Define the new element
customElements.define('word-count', WordCount, { extends: 'p' });
Note: The CustomElementRegistry is available through the Window.customElements property.
Specifications
| Specification | Status | Comment |
|---|---|---|
| HTML Living Standard The definition of 'CustomElementRegistry' in that specification. |
Living Standard | Initial definition. |
Browser compatibility
The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.
Update compatibility data on GitHub
| Desktop | Mobile | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Basic support | Chrome Full support 54 | Edge
No support
No
| Firefox
Full support
63
| IE No support No | Opera Full support 41 | Safari Full support 10.1 | WebView Android Full support 54 | Chrome Android Full support 54 | Edge Mobile
No support
No
| Firefox Android
Full support
63
| Opera Android Full support 41 | Safari iOS Full support 10.1 | Samsung Internet Android Full support 6.0 |
| Customized built-in element support | Chrome Full support 66 | Edge No support No | Firefox
Full support
63
| IE No support No | Opera Full support 53 | Safari No support No | WebView Android Full support 66 | Chrome Android Full support 66 | Edge Mobile No support No | Firefox Android
Full support
63
| Opera Android Full support 53 | Safari iOS No support No | Samsung Internet Android No support No |
define | Chrome
Full support
66
| Edge
No support
No
| Firefox
Full support
63
| IE No support No | Opera
Full support
53
| Safari
Full support
10.1
| WebView Android
Full support
66
| Chrome Android
Full support
66
| Edge Mobile
No support
No
| Firefox Android
Full support
63
| Opera Android
Full support
53
| Safari iOS
Full support
10.1
| Samsung Internet Android
Full support
6.0
|
get | Chrome
Full support
66
| Edge
No support
No
| Firefox
Full support
63
| IE No support No | Opera
Full support
53
| Safari
Full support
10.1
| WebView Android
Full support
66
| Chrome Android
Full support
66
| Edge Mobile
No support
No
| Firefox Android
Full support
63
| Opera Android
Full support
53
| Safari iOS
Full support
10.1
| Samsung Internet Android
Full support
6.0
|
upgrade | Chrome Full support 68 | Edge ? | Firefox ? | IE ? | Opera Full support 55 | Safari ? | WebView Android Full support 68 | Chrome Android Full support 68 | Edge Mobile ? | Firefox Android ? | Opera Android Full support 55 | Safari iOS ? | Samsung Internet Android ? |
whenDefined | Chrome
Full support
66
| Edge
No support
No
| Firefox
Full support
63
| IE No support No | Opera
Full support
53
| Safari
Full support
10.1
| WebView Android
Full support
66
| Chrome Android
Full support
66
| Edge Mobile
No support
No
| Firefox Android
Full support
63
| Opera Android
Full support
53
| Safari iOS
Full support
10.1
| Samsung Internet Android
Full support
6.0
|
Legend
- Full support
- Full support
- No support
- No support
- Compatibility unknown
- Compatibility unknown
- Experimental. Expect behavior to change in the future.
- Experimental. Expect behavior to change in the future.
- See implementation notes.
- See implementation notes.
- User must explicitly enable this feature.
- User must explicitly enable this feature.
Document Tags and Contributors
Tags:
Contributors to this page:
pallxk,
jpmedley,
chrisdavidmills,
fscholz,
Jedipedia,
snuggs,
daytonlowell,
arthurevans
Last updated by:
pallxk,