Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

163
Vistas
El elemento personalizado anidado no se procesa cuando el elemento principal se crea mediante programación

Para una aplicación de una sola página, registré algunos elementos personalizados en customElementRegistry que se representan a partir de literales de cadena a través de insertAdjacentHTML() . Anidar estos elementos no es un problema cuando se hace en html. Pero cuando trato de crear una instancia de un elemento personalizado principal mediante programación a partir de customElements.get('entry-page') o document.createElement('div', {is: 'entry-page'}) , los elementos personalizados anidados no se representan como si no estuviera definido en absoluto. Incluso customElements.whenDefined('nested-element').then(...) no ayuda.

 function registerCustomElement(name, tpl) { class cls extends HTMLDivElement { connectedCallback() { this.insertAdjacentHTML('afterbegin', tpl) } }; customElements.define(name, cls, { extends: 'div' }) } let tpl1 = '<p class="box">inner HTML</p>' let tpl2 = '<article class="outer">outer HTML<inner-html></inner-html></article>' let tpl3 = '<article class="outer">revised outer HTML<div is="inner-html"></div></article>' registerCustomElement('inner-html', tpl1) registerCustomElement('outer-html', tpl2) registerCustomElement('outer-html-revised', tpl3) document.querySelector('main') .insertAdjacentHTML('beforeend', '<div is="outer-html"></div>') document.querySelector('main') .insertAdjacentHTML('beforeend', '<div is="outer-html-revised"></div>')
 body { font-family: 'sans serif'; font-size: 0.8em } .box { padding: 1em; color: white; background-color: olive; } .outer { padding: 0.5em; margin-bottom: 0.5em; border: 2px solid darkorange }
 <h1>Embedded in html</h1> <h2>version with 'inner-html' element</h2> <outer-html></outer-html> <h2>version with 'div is inner-html' element</h2> <outer-html-revised></outer-html-revised> <h1>Embedded programmatically</h1> <main></main>

Cada elemento se define por separado como un Módulo ES6. Actualmente no estoy usando shadow DOM.

¿Por qué un elemento personalizado se representa completamente, incluidos todos los elementos anidados, cuando se incrusta en HTML, pero no cuando se implementa en el DOM mediante programación?

Editar El comportamiento del fragmento de código es diferente al de Firefox 94.0. Mientras que Firefox incluso evalúa elementos personalizados anidados con un nombre de etiqueta personalizado, este no es el caso con el motor de fragmentos de código. Entonces, posiblemente, los elementos personalizados anidados deberían tener el nombre de la etiqueta de su anchestor y tener un atributo "es" que indique el nombre del elemento personalizado.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Mientras que en HTML los elementos personalizados pueden ser referenciados por sus nombres incluso en los literales de cadena, los elementos personalizados se basan, esto parece no ser cierto, cuando se generan mediante programación. En este caso, la especificación requiere algo como <div is="custom-element-name"> ...

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda