<button is="mi-boton-extendido">Soy un mi-boton</button>
body {
padding: 16px;
}
button[is="mi-boton-extendido"] {
padding: 10px;
font-weight: bold;
}
class MiBotonExtendido extends HTMLButtonElement {
constructor() {
super();
this.addEventListener('click', function (e) {
alert('hola');
});
}
static get ceName() {
return 'mi-boton-extendido';
}
get is() {
return this.getAttribute('is');
}
set is(value) {
this.setAttribute('is', value || this.ceName );
}
}
customElements.define(MiBotonExtendido.ceName, MiBotonExtendido, { extends: 'button' });
// Puedes crear un nuevo elemento usando la API del DOM, pero de esta forma
// es necesario indicar en el segundo parametro, la propiedad "is"
const miBoton = document.createElement('button', { is: MiBotonExtendido.ceName });
// Y setear la propiedad/atributo manualmente
miBoton.is = MiBotonExtendido.ceName;
miBoton.textContent = 'Otra istancia de mi-boton, Dame click';
// Lo insertamos al body
document.body.appendChild(miBoton);
console.log(miBoton.getAttribute('is'));
This Pen doesn't use any external JavaScript resources.