Inserindo HTML em um div

118

Estou tentando inserir um pedaço de HTML em um div. Eu quero ver se a maneira simples de JavaScript é mais rápida do que usar jQuery. Infelizmente, esqueci como fazer da maneira 'antiga'. : P

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);
}

o que estou fazendo de errado aqui, pessoal?

editar :
Alguém perguntou o que é mais rápido, jquery ou plain js, então escrevi um teste:
http://jsperf.com/html-insertion-js-vs-jquery

plain js é 10% mais rápido

mkoryak
fonte
Agora, qual é mais rápido? javascript ou jquery simples?
Ali
3
@Ali: js é mais rápido, veja minha edição.
mkoryak

Respostas:

176

Eu acho que é isso que você quer:

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

Lembre-se de que innerHTML não é acessível para todos os tipos de tags ao usar o IE. (elementos da tabela, por exemplo)

Nathan
fonte
23
1 por mencionar a compatibilidade do IE, gostaria que todos fizessem isso!
Enrico
Ótimo, obrigado!
user3396381
53

Usar JQuery cuidaria dessa inconsistência do navegador. Com a biblioteca jquery incluída em seu projeto, basta escrever:

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

Você também pode considerar o uso de:

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

Isso adicionará sua galeria como o último item no div selecionado. Ou:

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

Isso o adicionará como o primeiro item no div selecionado.

Consulte os documentos JQuery para essas funções:

designerdre101
fonte
22
O OP pediu especificamente javascript simples, mas isso me ajudou, então ainda o considero útil.
doubleJ
Ajudaria a ver um exemplo com uma longa seqüência de Html inserida. Por exemplo, tenho um caso em que as tecnologias de servidor (php etc) não são permitidas e desejo reutilizar cerca de 20 linhas de html dentro da mesma página.
Jennifer Michelle
Isso pode ser útil. Obrigado.
arunken
40

Estou usando "+" (mais) para inserir div em html:

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

Espero que esta ajuda.

Yosep Tito
fonte
3
Obrigado pela resposta + =, que me salvou de muitas dores de cabeça.
Michael Tunnell de
1
@MichaelTunnell realmente funcionou
divino
Obrigado. A função appendChild não funcionou para mim, mas funcionou bem para meu caso de uso.
khwilo de
Esta é a resposta correta, a pergunta era como inserir, obrigado
OJB1 de
28

Como alternativa, você pode usar insertAdjacentHTML - no entanto, eu procuro e faço alguns testes de desempenho - (2019.09.13 sexta-feira) MacOs High Sierra 10.13.6 no Chrome 76.0.3809 (64 bits), Safari 12.1.2 (13604.5.6), Firefox 69.0.0 (64 bits)). O teste F é apenas para referência - está fora do escopo da questão porque precisamos inserir html dinamicamente - mas em F eu faço isso 'manualmente' (de forma estática) - teoricamente (até onde eu sei) este deve ser o maneira mais rápida de inserir novos elementos html.

insira a descrição da imagem aqui

RESUMO

  • O A innerHTML = (não confunda com +=) é mais rápido (Safari 48k operações por segundo, Firefox 43k op / seg, Chrome 23k op / seg) O A é ~ 31% mais lento do que a solução ideal F apenas cromo, mas no safari e firefox é mais rápido ( !)
  • A B innerHTML +=... é mais lento em todos os navegadores (Chrome 95 op / seg, Firefox 88 op / seg, Sfari 84 op / seg)
  • O D jQuery é o segundo mais lento em todos os navegadores (Safari 14 op / seg, Firefox 11k op / seg, Chrome 7k op / seg)
  • A solução de referência F (teoricamente mais rápida) não é mais rápida no firefox e safari (!!!) - o que é surpreendente
  • O navegador mais rápido foi o Safari

Mais informações sobre porque innerHTML =é muito mais rápido do que innerHTML +=é aqui . Você pode realizar o teste em sua máquina / navegador AQUI

Kamil Kiełczewski
fonte
18

E muitas linhas podem ser assim. O html aqui é apenas uma amostra.

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
fonte