Inserimento di HTML in un div


118

Sto cercando di inserire un pezzo di HTML in un div. Voglio vedere se il semplice modo JavaScript è più veloce rispetto all'utilizzo di jQuery. Sfortunatamente, ho dimenticato come farlo alla "vecchia" maniera. : 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);
}

cosa sto facendo di sbagliato qui ragazzi?

modifica :
qualcuno ha chiesto quale fosse più veloce, jquery o plain js, quindi ho scritto un test:
http://jsperf.com/html-insertion-js-vs-jquery

plain js è il 10% più veloce


Ora qual è il più veloce? semplice javascript o jquery?
Ali

3
@ Ali: js è più veloce, guarda la mia modifica.
mkoryak

Risposte:


177

Penso che questo sia quello che vuoi:

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

Tieni presente che innerHTML non è accessibile per tutti i tipi di tag quando si utilizza IE. (elementi della tabella per esempio)


23
+1 per aver menzionato la compatibilità con IE, vorrei che lo facessero tutti!
Enrico

Ottimo grazie!
user3396381

53

L'uso di JQuery si sarebbe preso cura di quell'incoerenza del browser. Con la libreria jquery inclusa nel tuo progetto scrivi semplicemente:

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

Puoi anche considerare di utilizzare:

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

Questo aggiungerà la tua galleria come ultimo elemento nel div selezionato. O:

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

Questo lo aggiungerà come primo elemento nel div selezionato.

Consulta la documentazione di JQuery per queste funzioni:


22
OP ha richiesto espressamente un semplice javascript, ma questo mi ha aiutato, quindi lo considero ancora utile.
doubleJ

Sarebbe utile vedere un esempio con una lunga stringa di Html inserita. Ad esempio, ho un caso in cui le tecnologie server (php ecc.) Non sono consentite e voglio riutilizzare circa 20 righe di html all'interno della stessa pagina.
Jennifer Michelle

Questo potrebbe tornare utile. Grazie.
arunken

40

Utilizzo "+" (più) per inserire div in html:

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

Spero che questo aiuto.


3
Grazie per la risposta + =, che mi ha salvato un sacco di mal di testa.
Michael Tunnell

1
@MichaelTunnell lo ha fatto davvero
divino

Grazie. La funzione appendChild non ha funzionato per me, ma ha funzionato bene per il mio caso d'uso.
khwilo

Questa è la risposta corretta, la domanda chiedeva come inserire, grazie
OJB1

28

In alternativa puoi usare insertAdjacentHTML - tuttavia ho scavato e ho fatto alcuni test delle prestazioni - (2019.09.13 venerdì) MacOs High Sierra 10.13.6 su Chrome 76.0.3809 (64-bit), Safari 12.1.2 (13604.5.6), Firefox 69.0.0 (64 bit)). Il test F è solo di riferimento - è fuori dall'ambito della domanda perché dobbiamo inserire dinamicamente html - ma in F lo faccio a mano (in modo statico) - teoricamente (per quanto ne so) questo dovrebbe essere il modo più veloce per inserire nuovi elementi html.

inserisci qui la descrizione dell'immagine

SOMMARIO

  • L' A innerHTML = (da non confondere con +=) è il più veloce (Safari 48k operazioni al secondo, Firefox 43k op / sec, Chrome 23k op / sec) L' A è ~ 31% più lento della soluzione ideale F solo chrome ma su safari e firefox è più veloce ( !)
  • Il B innerHTML +=... è il più lento su tutti i browser (Chrome 95 op / sec, Firefox 88 op / sec, Sfari 84 op / sec)
  • Il D jQuery è seconda lenta su tutti i browser (Safari 14 op / sec, Firefox 11k op / sec, Chrome 7k op / sec)
  • La soluzione di riferimento F (teoricamente più veloce) non è la più veloce su Firefox e Safari (!!!) - il che è sorprendente
  • Il browser più veloce è stato Safari

Maggiori informazioni sul motivo per cui innerHTML =è molto più veloce di quanto non innerHTML +=sia qui . Puoi eseguire il test sulla tua macchina / browser QUI


18

E molte righe possono assomigliare a questa. L'html qui è solo di esempio.

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);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.