208 votes

Ajouter une chaîne HTML au DOM

Comment ajouter une chaîne HTML telle que

 var str = '<p>Just some <span>text</span> here</p>';

au <div> avec l'id test ?

(Btw div.innerHTML += str; n'est pas acceptable.)

35voto

alex Points 186293

Est-ce acceptable ?

 var child = document.createElement('div');
child.innerHTML = str;
child = child.firstChild;
document.getElementById('test').appendChild(child);

jsFiddle .

Mais la réponse de Neil est une meilleure solution.

12voto

L'idée est d'utiliser innerHTML sur un élément intermédiaire, puis de déplacer tous ses nœuds enfants là où vous le souhaitez vraiment via appendChild .

 var target = document.getElementById('test');
var str = '<p>Just some <span>text</span> here</p>';

var temp = document.createElement('div');
temp.innerHTML = str;
while (temp.firstChild) {
  target.appendChild(temp.firstChild);
}

Cela évite d'effacer les gestionnaires d'événements sur div#test mais vous permet toujours d'ajouter une chaîne de code HTML.

4voto

hsivonen Points 5133

La bonne méthode consiste à utiliser insertAdjacentHTML . Dans Firefox antérieur à 8, vous pouvez revenir à l'utilisation de Range.createContextualFragment si votre str ne contient pas de balises script

Si votre str contient des script , vous devez supprimer les éléments script du fragment renvoyé par createContextualFragment avant d'insérer le fragment. Sinon, les scripts s'exécuteront. ( insertAdjacentHTML marque les scripts comme non exécutables.)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X