Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

165
Visualizações
¿Hay alguna manera de agregar atributos personalizados a elementos personalizados?

Mientras jugaba con elementos personalizados, me preguntaba si se podrían usar atributos personalizados dentro de los elementos (y posiblemente también dentro de sus elementos secundarios). Sé que VueJS hace algo similar con atributos como v-bind, v-for, etc. y sé que probablemente hay muchas más cosas debajo del capó de lo que me doy cuenta. Intenté registrar elementos personalizados e intentar recuperarlos así:

 <new-element cool="Awesome!"> </new-element> class NewElement extends HTMLElement { constructor() { super(); this.coolAttr = this.getAttribute("cool"); } } customElements.define("new-element", NewElement);

Sin embargo, al cargar la página (en Google Chrome para mí), los atributos "personalizados" desaparecen y cualquier intento de obtenerlos recupera nulo. ¿Hay alguna forma de "registrar" estos atributos personalizados o tengo que ceñirme a los atributos de datos?

about 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

  • Los atributos pasan a estar disponibles en connectedCallback ,
    aún no están disponibles en el constructor
    ¡A menos que el elemento personalizado se analice (en el DOM) ANTES de que se defina el elemento!

  • También tenga en cuenta que el attributeChangedCallback se ejecuta antes que connectedCallback
    para atributos observados

  • Ver también: https://andyogo.github.io/custom-element-reactions-diagram/

 .as-console-row-code { font: 12px Arial!important; background:yellow; color:darkred; } .as-console-row:after{ display:none!important }
 <before-element cool="Awesome?">FOO</before-element> <script> class NewElement extends HTMLElement { log( ...args ){ console.log(this.nodeName, `cool:${this.getAttribute("cool")}`,"\t\t\t",...args ); } static get observedAttributes() { return ["cool"]; } constructor() { const name = "constructor"; // CAN! run code BEFORE super()! // super() sets AND returns the 'this' scope super().log(name); } connectedCallback() { this.log("connectedCallback", this.innerHTML || "innerHTML not parsed yet"); // be aware this.innerHTML is only available for PARSED elements // use setTimeout(()=>{...},0) if you do need this.innerHTML } attributeChangedCallback(name, oldValue, newValue) { this.log(`attributeChangedCallback name:${name}, old:${oldValue}, new:${newValue}`); } } customElements.define("before-element", class extends NewElement {}); customElements.define("after-element", class extends NewElement {}); </script> <after-element cool="Awesome!!">BAR</after-element>

about 4 years ago · Santiago Trujillo Relatório

0

Se puede resolver fácilmente agregando el nombre de los atributos después de "datos-".

 <New-element data-*="Anything you want" />

por ejemplo, puedes tener:

 <element data-cool="value">

Puede tener tantos atributos personalizados como desee.

about 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda