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

209
Visualizações
La forma más eficiente de crear un div con varios hijos.

Estoy tratando de crear una función que tome un objeto con algunos parámetros y devuelva un div recién creado.

Por lo que puedo ver, parece que hay dos formas principales de lograr esto:

  • creando cada elemento por sí mismo y añadiéndolo
  • creando un literal de plantilla y configurando divs innerHTML

las entradas de las funciones no son generadas por el usuario, por lo que no creo que el uso de literales de plantilla cree un problema de seguridad (infórmeme si me equivoco)

Así que ahora mis preguntas son las siguientes:

  • ¿Es uno más eficiente que el otro?
  • es uno preferido?
  • ¿Hay alguna otra preocupación?
  • ¿Hay una manera aún más eficiente/mejor?

a continuación puede ver las dos soluciones que he encontrado.

 function createDiv (entry) { const div = document.createElement('div') div.classList.add('exchange') div.id = entry.exchange const img = document.createElement('img') img.src = `/static/img/${entry.img}.png` img.alt = entry.name img.classList.add('logo-image') div.appendChild(img) const link = document.createElement('a') link.href = entry.url link.classList.add('name') link.innerText = entry.name div.appendChild(link) const routing = document.createElement('span') routing.innerText = entry.routing ? entry.routing : '' div.appendChild(routing) const price = document.createElement('span') price.innerText = entry.price price.classList.add('price') div.appendChild(price) return div } function createDiv (entry) { const div = document.createElement('div') div.classList.add('exchange') div.id = entry.exchange let text = ` <img class="logo-image" src="/static/img/${entry.img}.png" alt="${entry.name}"> <a class="exchange-name" href="${entry.url}">${entry.name}</a> <span>${routing.innerText = entry.routing ? entry.routing : ''}</span> <span class="price">${entry.price}</span> ` div.innerHTML = text return div }

¡Gracias de antemano!

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

0

¿Qué hay de hacer algo como lo siguiente?

 const createDiv = ({ exchange, img, name, url, routing: entryRouting, price }) => { return ` <div class="exchange" id="${exchange}"> <img class="logo-image" src="/static/img/${img}.png" alt="${name}"> <a class="exchange-name" href="${url}">${name}</a> <span>${routing.innerText = entryRouting || ''}</span> <span class="price">${price}</span> </div> `; }

En este caso, obtiene todo el poder de los literales de plantilla y de la destrucción de objetos .

Acerca de los valores, debe validarlos de alguna manera antes de almacenarlos en la base de datos y desinfectar el HTML antes de recuperarlo. Algún tipo de validación fácil con expresiones regulares podría ser suficiente para la validación. Para desinfectar, puede elegir una de las muchas bibliotecas como esta https://www.npmjs.com/package/sanitize-html .

Acerca de las actuaciones , no me lo tomaría demasiado en serio hasta que hagas muchas iteraciones. Por lo que veo, es una llamada de función única. Así que optaría por la forma más limpia: cadenas de plantilla. Pero si tiene curiosidad, la cadena de plantilla es la más rápida. El primer enfoque es casi un 100% más lento. Puede consultar los resultados de la prueba que hice en más de 100 iteraciones aquí https://jsbench.me/7gkw1t31rs/2 .

Recuerde que el enfoque que le estoy diciendo necesitará un HTML interno una vez que la función createDiv devuelva su valor.

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