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

mkoryak
fuente
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)

Nathan
fuente
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:

diseñadordre101
fuente
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.

Yosep Tito
fuente
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Í

Kamil Kiełczewski
fuente
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);
átomo
fuente