493 votes

Comment ajouter des données à une division en utilisant JavaScript ?

J'utilise AJAX pour ajouter des données à l'élément div, où je remplis la div à partir de JavaScript, comment puis-je ajouter de nouvelles données à la div sans perdre les données précédentes trouvées dans la div ?

10 votes

$(div).append(data) ;

0 votes

Est-ce l'attribut "data" ou le innerHTML dont vous parlez ?

63 votes

@jimy c'est jquery, pas besoin de l'utiliser pour une chose aussi triviale

700voto

Neal Points 68710

Essayez ça :

var div = document.getElementById('divID');

div.innerHTML += 'Extra stuff';

60 votes

Danger, Will Robinson ! Ceci ajoute HTML et non du texte. Si votre Extra Stuff est fourni par l'utilisateur, vous venez d'introduire une vulnérabilité de sécurité. Il est préférable d'utiliser la réponse de @Chandu ci-dessous.

0 votes

En ce qui concerne la réponse de @DavidGiven, est-ce vraiment un problème de sécurité ? Si c'est le cas, qu'est-ce qui pourrait être sûr ?

10 votes

Oui, c'est un Vulnérabilité XSS . Il est préférable de créer un nœud de texte avec le contenu, comme décrit dans la réponse ci-dessous.

408voto

Chandu Points 40028

Utilisation de appendChild :

var theDiv = document.getElementById("<ID_OF_THE_DIV>");
var content = document.createTextNode("<YOUR_CONTENT>");
theDiv.appendChild(content);

Utilisation de innerHTML :
Cette approche supprimera tous les auditeurs des éléments existants, comme mentionné par @BiAiB. Soyez donc prudent si vous envisagez d'utiliser cette version.

var theDiv = document.getElementById("<ID_OF_THE_DIV>");
theDiv.innerHTML += "<YOUR_CONTENT>";

0 votes

J'utilise cette méthode avec mon élément "contenteditable" avec angularjs binding, et tout fonctionne correctement !

1 votes

Ce devrait être la réponse acceptée, en effet. Non seulement c'est une belle façon de faire, mais innerHTML va reconstruire le DOM, et ce n'est tout simplement pas une bonne solution. Utilisez appendChild().

6 votes

C'est mieux, mais createTextNode ne fonctionnera pas si vous chargez du HTML. Si vous voulez ajouter des éléments de liste, par exemple, cela ne fonctionnera pas. C'est assez limitatif.

142voto

BiAiB Points 2329

Méfiez-vous innerHTML vous avez en quelque sorte perdre quelque chose quand vous l'utilisez :

theDiv.innerHTML += 'content';

Est équivalent à :

theDiv.innerHTML = theDiv.innerHTML + 'content';

Ce qui détruira tous les noeuds de votre div et en recréer de nouveaux. Toutes les références et tous les écouteurs des éléments qu'il contient seront perdus. .

Si vous devez les conserver (lorsque vous avez attaché un gestionnaire de clics, par exemple), vous devez ajouter le nouveau contenu avec les fonctions DOM (appendChild,insertAfter,insertBefore) :

var newNode = document.createElement('div');
newNode.innerHTML = data;
theDiv.appendChild(newNode);

2 votes

Oui, mais cela entraînera un extra à l'intérieur de la division parent, ce qui n'est pas nécessaire et peut perturber certains styles CSS.

0 votes

@Neal c'est juste un exemple d'utilisation de appendChild. le point n'est pas ici.

0 votes

La manière correcte de faire le appendChild a été fait par @Cybernate

17voto

Thomas Brasington Points 397

Si vous utilisez jQuery, vous pouvez utiliser $('#mydiv').append('html content') et il conservera le contenu existant.

http://api.jquery.com/append/

8voto

Macfer Ann Points 21

Même ça, ça va marcher :

var div = document.getElementById('divID');

div.innerHTML += 'Text to append';

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