Insérer du HTML dans un div


118

J'essaye d'insérer un morceau de HTML dans un div. Je veux voir si la méthode JavaScript simple est plus rapide que l'utilisation de jQuery. Malheureusement, j'ai oublié comment le faire à l'ancienne. : 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);
}

qu'est-ce que je fais de mal ici les gars?

edit :
Quelqu'un a demandé quel est le plus rapide, jquery ou js ordinaire, alors j'ai écrit un test:
http://jsperf.com/html-insertion-js-vs-jquery

plain js est 10% plus rapide


Maintenant, lequel est le plus rapide? javascript ou jquery?
Ali

3
@Ali: js est plus rapide, voir ma modification.
mkoryak

Réponses:


177

Je pense que c'est ce que tu veux:

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

Gardez à l'esprit que innerHTML n'est pas accessible pour tous les types de balises lors de l'utilisation d'IE. (éléments de table par exemple)


23
+1 pour avoir mentionné la compatibilité IE, souhaite que tout le monde fasse cela!
Enrico

Super merci!
user3396381

53

L'utilisation de JQuery permettrait de remédier à cette incohérence du navigateur. Avec la bibliothèque jquery incluse dans votre projet, écrivez simplement:

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

Vous pouvez également envisager d'utiliser:

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

Cela ajoutera votre galerie en tant que dernier élément du div sélectionné. Ou:

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

Cela l'ajoutera comme premier élément dans le div sélectionné.

Consultez la documentation JQuery pour ces fonctions:


22
OP a spécifiquement demandé du javascript, mais cela m'a aidé, donc je le considère toujours utile.
doubleJ

Cela aiderait à voir un exemple avec une longue chaîne de Html insérée. Par exemple, j'ai un cas dans lequel les technologies de serveur (php, etc.) sont interdites, et je veux réutiliser environ 20 lignes de html dans la même page.
Jennifer Michelle

Cela pourrait être utile. Merci.
arunken

40

J'utilise "+" (plus) pour insérer div en html:

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

J'espère que cette aide.


3
Merci pour la réponse + =, cela m'a évité beaucoup de maux de tête.
Michael Tunnell

1
@MichaelTunnell ça l'a vraiment fait
divin

Je vous remercie. La fonction appendChild ne fonctionnait pas pour moi mais cela fonctionnait bien pour mon cas d'utilisation.
khwilo

C'est la bonne réponse, la question demandait comment insérer, merci
OJB1

28

Comme alternative, vous pouvez utiliser insertAdjacentHTML - mais je creuse et fais des tests de performances - (2019.09.13 vendredi) MacOs High Sierra 10.13.6 sur Chrome 76.0.3809 (64 bits), Safari 12.1.2 (13604.5.6), Firefox 69.0.0 (64 bits)). Le test F est uniquement pour référence - il est hors de portée de la question car nous devons insérer dynamiquement du HTML - mais en F je le fais à la main (de manière statique) - théoriquement (pour autant que je sache) cela devrait être le moyen le plus rapide d'insérer de nouveaux éléments html.

entrez la description de l'image ici

RÉSUMÉ

  • Le A innerHTML = (ne pas confondre avec +=) est le plus rapide (Safari 48k opérations par seconde, Firefox 43k op / s, Chrome 23k op / s) Le A est ~ 31% plus lent que la solution idéale F uniquement chrome mais sur safari et firefox est plus rapide ( !)
  • Le B innerHTML +=... est le plus lent sur tous les navigateurs (Chrome 95 op / sec, Firefox 88 op / sec, Sfari 84 op / sec)
  • Le D jQuery est le deuxième lent sur tous les navigateurs (Safari 14 op / sec, Firefox 11k op / sec, Chrome 7k op / sec)
  • La solution de référence F (théoriquement la plus rapide) n'est pas la plus rapide sur firefox et safari (!!!) - ce qui est surprenant
  • Le navigateur le plus rapide était Safari

Plus d'informations sur pourquoi innerHTML =est beaucoup plus rapide queinnerHTML += est ici . Vous pouvez effectuer un test sur votre machine / navigateur ICI


18

Et de nombreuses lignes peuvent ressembler à ceci. Le html ici est un exemple seulement.

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);
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.