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

130
Visualizações
I want to fetch and insert an attribute multiple times

I want to fire the contents of all attributes in a custom element <my-component> . Currently, only the preceding attribute is executed.

If it works, this will be <p>hello, world! welcom </p> .

Also, I want the {{ }} part to be executed with or without spaces.

function component(elementName, ComponentOptions) {
  customElements.define(`${elementName}`, class extends HTMLElement {
    connectedCallback() {
      if (ComponentOptions.return) {
        if (this.getAttributeNames()) {
          const AttrNames = this.getAttributeNames();
          var optionsreturn = ComponentOptions.return;
          AttrNames.forEach(attr => {
            let val = this.getAttribute(attr);
            optionsreturn = optionsreturn.replace(`{{ ${attr} }}`, val);
            this.outerHTML = optionsreturn;
          });
        } else {
          this.outerHTML = ComponentOptions.return
        }
      }
    }
  });
}

component("my-component", {
  return: `<p>hello, {{ w }} {{ wel }} </p>`
})
<my-component w="world!" wel="welcom"></my-component>

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

You need to move your this.outerHTML = optionsreturn; outside the forEach loop.

I also changed the string into a regular expression in your .replace() call. It will now accept zero or one spaces surrounding your attribute names.

function component(elementName, ComponentOptions) {
  customElements.define(elementName, class extends HTMLElement {
    connectedCallback() {
      if (ComponentOptions.return) {
        if (this.getAttributeNames()) {
          const AttrNames = this.getAttributeNames();
          var optionsreturn = ComponentOptions.return;
          AttrNames.forEach(attr => {
            let val = this.getAttribute(attr);
            optionsreturn = optionsreturn.replace(new RegExp(`\{\{ ?${attr} ?\}\}`,"g"), val);
          });
          this.outerHTML = optionsreturn;
        } else {
          this.outerHTML = ComponentOptions.return
        }
      }
    }
  });
}

component("my-component", {
  return: `<p>hello, {{ w }} {{wel}} </p>`
})
<my-component w="world!" wel="welcom"></my-component>

about 4 years ago · Juan Pablo Isaza 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