Insertar HTML en un div


118

Estoy tratando de insertar un fragmento de HTML en un div. Quiero ver si la forma simple de JavaScript es más rápida que usar jQuery. Desafortunadamente, olvidé cómo hacerlo a la "antigua" forma. :PAGS

var test2 = function(){
    var cb = function(html){
        var t1 = document.getElementById("test2");
        var d = document.createElement("div");
        d.id ="oiio";
        d.innerHtml = html;
        t1.appendChild(d);
        console.timeEnd("load data with javascript");
    };
    console.time("load data with javascript");
    $.get("test1.html", cb);
}

¿Qué estoy haciendo mal aquí chicos?

editar :
Alguien preguntó cuál es más rápido, jquery o js simple, así que escribí una prueba:
http://jsperf.com/html-insertion-js-vs-jquery

plain js es un 10% más rápido


Ahora, ¿cuál es más rápido? ¿JavaScript simple o jquery?
Ali

3
@Ali: js es más rápido, mira mi edición.
mkoryak

Respuestas:


177

Creo que esto es lo que quieres:

document.getElementById('tag-id').innerHTML = '<ol><li>html data</li></ol>';

Tenga en cuenta que innerHTML no es accesible para todos los tipos de etiquetas cuando se usa IE. (elementos de la tabla por ejemplo)


23
+1 por mencionar la compatibilidad con IE, ¡ojalá todos hicieran esto!
Enrico

¡Genial gracias!
user3396381

53

El uso de JQuery se encargaría de esa inconsistencia del navegador. Con la biblioteca jquery incluida en su proyecto, simplemente escriba:

$('#yourDivName').html('yourtHTML');

También puede considerar usar:

$('#yourDivName').append('yourtHTML');

Esto agregará su galería como el último elemento en el div seleccionado. O:

$('#yourDivName').prepend('yourtHTML');

Esto lo agregará como el primer elemento en el div seleccionado.

Consulte los documentos de JQuery para estas funciones:


22
OP pidió específicamente javascript simple, pero esto me ayudó, así que todavía lo considero útil.
doubleJ

Ayudaría a ver un ejemplo con una cadena larga de Html insertada. Por ejemplo, tengo un caso en el que las tecnologías de servidor (php, etc.) no están permitidas y quiero reutilizar unas 20 líneas de html dentro de la misma página.
Jennifer Michelle

Esto podría ser útil. Gracias.
arunken

40

Estoy usando "+" (más) para insertar div en html:

document.getElementById('idParent').innerHTML += '<div id="idChild"> content html </div>';

Espero que esto ayude.


3
Gracias por la respuesta + =, eso me ahorró muchos dolores de cabeza.
Michael Tunnell

1
@MichaelTunnell realmente lo hizo
divine

Gracias. La función appendChild no me funcionó, pero funcionó bien para mi caso de uso.
khwilo

Esta es la respuesta correcta, la pregunta era cómo insertar, gracias
OJB1

28

Como alternativa, puede usar insertAdjectedHTML , sin embargo, profundizo y hago algunas pruebas de rendimiento (viernes de 2019.09.13) MacOs High Sierra 10.13.6 en Chrome 76.0.3809 (64 bits), Safari 12.1.2 (13604.5.6), Firefox 69.0.0 (64 bits)). La prueba F es solo para referencia, está fuera del alcance de la pregunta porque necesitamos insertar html dinámicamente, pero en F lo hago a mano (de forma estática), teóricamente (hasta donde yo sé) este debería ser el forma más rápida de insertar nuevos elementos html.

ingrese la descripción de la imagen aquí

RESUMEN

  • La A innerHTML = (no confundir con +=) es la más rápida (Safari 48k operaciones por segundo, Firefox 43k op / seg, Chrome 23k op / seg) La A es ~ 31% más lenta que la solución ideal F solo Chrome pero en Safari y Firefox es más rápido ( !)
  • La B innerHTML +=... es más lenta en todos los navegadores (Chrome 95 op / sec, Firefox 88 op / sec, Sfari 84 op / sec)
  • El D jQuery es el segundo más lento en todos los navegadores (Safari 14 op / seg, Firefox 11k op / seg, Chrome 7k op / seg)
  • La solución de referencia F (teóricamente la más rápida) no es la más rápida en firefox y safari (!!!), lo cual es sorprendente
  • El navegador más rápido fue Safari

Más información acerca de por qué innerHTML =es mucho más rápido que innerHTML +=está aquí . Puede realizar la prueba en su máquina / navegador AQUÍ


18

Y muchas líneas pueden verse así. El html aquí es solo una muestra.

var div = document.createElement("div");

div.innerHTML =
    '<div class="slideshow-container">\n' +
    '<div class="mySlides fade">\n' +
    '<div class="numbertext">1 / 3</div>\n' +
    '<img src="image1.jpg" style="width:100%">\n' +
    '<div class="text">Caption Text</div>\n' +
    '</div>\n' +

    '<div class="mySlides fade">\n' +
    '<div class="numbertext">2 / 3</div>\n' +
    '<img src="image2.jpg" style="width:100%">\n' +
    '<div class="text">Caption Two</div>\n' +
    '</div>\n' +

    '<div class="mySlides fade">\n' +
    '<div class="numbertext">3 / 3</div>\n' +
    '<img src="image3.jpg" style="width:100%">\n' +
    '<div class="text">Caption Three</div>\n' +
    '</div>\n' +

    '<a class="prev" onclick="plusSlides(-1)">&#10094;</a>\n' +
    '<a class="next" onclick="plusSlides(1)">&#10095;</a>\n' +
    '</div>\n' +
    '<br>\n' +

    '<div style="text-align:center">\n' +
    '<span class="dot" onclick="currentSlide(1)"></span> \n' +
    '<span class="dot" onclick="currentSlide(2)"></span> \n' +
    '<span class="dot" onclick="currentSlide(3)"></span> \n' +
    '</div>\n';

document.body.appendChild(div);
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.