CustomElementRegistry

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since January 2020.

A interface CustomElementRegistry provê métodos para registro de elementos customizados e busca de elementos registrados. Para instancia-lo, use a propriedade window.customElements.

Métodos

CustomElementRegistry.define()

Define um novo elemento customizado.

CustomElementRegistry.get()

Retorna o construtor do nome do elemento informado, ou undefined caso não tenha sido definido.

CustomElementRegistry.whenDefined()

Retorna um promise vazio que é resolvido quando o elemento customizado é inserido. Se o elemento já foi definido, o retorno ja é informado.

Exemplos

O código a seguir foi pego do nosso word-count-web-component exemplo (veja em ação). Perceba que usamos o método CustomElementRegistry.define() para definir um elemento customizado.

js
// Cria uma classe para o elemento
class WordCount extends HTMLParagraphElement {
  constructor() {
    // Sempre execute primeiro o método super
    super();

    // Conta as palavras no elemento pai
    var wcParent = this.parentNode;

    function countWords(node) {
      var text = node.innerText || node.textContent;
      return text.split(/\s+/g).length;
    }

    var count = "Words: " + countWords(wcParent);

    // Cria um shadow root
    var shadow = this.attachShadow({ mode: "open" });

    // Cria um nó de texto e adiciona o contador de palavra nele
    var text = document.createElement("span");
    text.textContent = count;

    // Acrescenta ao shadow root
    shadow.appendChild(text);

    // Atualiza o contador quando houver mudança
    setInterval(function () {
      var count = "Words: " + countWords(wcParent);
      text.textContent = count;
    }, 200);
  }
}

// Define um novo elemento
customElements.define("word-count", WordCount, { extends: "p" });

Nota: Note: The CustomElementsRegistry is available through the Window.customElements property.

Especificações

Specification
HTML Standard
# custom-elements-api

Compatibilidade com navegadores

BCD tables only load in the browser