Les méthodes DOM, comme indiqué par Tom.
innerHTML, comme mentionné par iHunger.
Les méthodes DOM sont hautement préférables aux chaînes pour définir les attributs et le contenu. Si vous vous trouvez en train d'écrire innerHTML= '<a href="'+path+'">'+text+'</a>'
, vous êtes en train de créer de nouvelles failles de sécurité pour les scripts intersites du côté client, ce qui est un peu triste si vous avez passé du temps à sécuriser votre serveur.
Les méthodes DOM sont traditionnellement décrites comme «lentes» par rapport à innerHTML. Mais ce n'est pas vraiment toute l'histoire.Ce qui est lent est l'insertion d'un grand nombre de nœuds enfants:
for (var i= 0; i<1000; i++)
div.parentNode.insertBefore(document.createElement('div'), div);
Cela se traduit par une charge de travail pour les DOM trouver le bon endroit dans son nodelist d'insérer l'élément, déplacer l'autre nœuds enfants jusqu'à, insérer la nouvelle nœud, mise à jour des pointeurs, etc.
La définition d'une valeur d'attribut existante ou des données d'un nœud de texte, par contre, est très rapide; vous venez de changer un pointeur de chaîne et c'est tout. Cela va être beaucoup plus rapide que de sérialiser le parent avec innerHTML, de le changer et de l'analyser de nouveau (et ne perdra pas vos données non sérialisables comme les gestionnaires d'événements, les références JS et les valeurs de formulaire).
Il y a des techniques pour faire des manipulations de DOM sans tant de childNodes lentes marchant. En particulier, soyez conscient des possibilités de cloneNode
, et en utilisant DocumentFragment
. Mais parfois innerHTML est vraiment plus rapide. Vous pouvez toujours obtenir le meilleur des deux mondes en utilisant innerHTML pour écrire votre structure de base avec des espaces réservés pour les valeurs d'attribut et le contenu du texte, que vous remplissez ensuite en utilisant DOM. Cela vous évite d'avoir à écrire votre propre fonction escapehtml()
pour contourner les problèmes d'échappement/de sécurité mentionnés ci-dessus.
JQuery. Je n'ai pas ajouté cela comme une réponse réelle, mais je suis venu près. Il gère correctement la manipulation dom, tout en vous permettant d'écrire quelque chose de simple comme ceci: $ ("
C'est un cas où le mème jQuery a vraiment du sens. "Je vois que vous essayez d'écrire du HTML en utilisant JavaScript, vous devriez laisser tomber ça et utiliser jQuery!" –
jQuery n'est en aucun cas le moyen "correct" de créer du HTML en JavaScript. Il est écrit en JavaScript et utilisera une ou plusieurs des méthodes dans les réponses ci-dessous, avec l'inconvénient qu'en tant que bibliothèque à usage général, il ne fera pas les choix éclairés de la stratégie pour chaque situation que vous en tant que développeur aurait. –