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

202
Vistas
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 Respuestas
Responde la pregunta

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 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