J'utilise plain js pour modifier le texte interne d'un élément d'étiquette, et je n'étais pas sûr pour quelles raisons je devrais utiliser innerHTML ou nodeValue ou textContent. Je n'ai pas besoin de créer un nouveau nœud ou de modifier les éléments HTML ou quoi que ce soit - remplacez simplement le texte. Voici un exemple de code:
var myLabel = document.getElementById("#someLabel");
myLabel.innerHTML = "Some new label text!"; // this works
myLabel.firstChild.nodeValue = "Some new label text!"; // this also works.
myLabel.textContent = "Some new label text!"; // this also works.
J'ai regardé à travers la source jQuery, et elle utilise nodeValue exactement une fois mais innerHTML et textContent plusieurs fois. Ensuite, j'ai trouvé ce test jsperf qui indique que firstChild.nodeValue est beaucoup plus rapide. Du moins, c'est ce que j'interprète comme cela.
Si firstChild.nodeValue est tellement plus rapide, quel est le problème? N'est-il pas largement soutenu? Y a-t-il un autre problème?
la source
nodeValue
.textContent
sortiestext/plain
tandis que.innerHTML
sortiestext/html
.Exemple rapide:
var example = document.getElementById('exampleId');
example.textContent = '<a href="https://google.com">google</a>';
résultat: <a href="http://google.com"> google </a>
example.innerHTML = '<a href="https://google.com">google</a>';
sortie: google
Vous pouvez voir dans le premier exemple que la sortie de type
text/plain
n'est pas analysée par le navigateur et entraîne l'affichage du contenu complet. La sortie du typetext/html
indique au navigateur de l'analyser avant de l'afficher.MDN innerHTML , MDN textContent , MDN nodeValue
la source
Les deux que je connais bien et avec lesquels je travaille sont innerHTML et textContent .
J'utilise textContent lorsque je veux juste changer le texte d'un paragraphe ou d'un titre comme ceci:
Ainsi, textContent modifie simplement le texte, mais il n'analyse pas le HTML, comme nous pouvons le voir à partir des balises visibles en texte brut dans le résultat.
Si nous voulons analyser le HTML, nous utilisons innerHTML comme ceci:
Ainsi, ce deuxième exemple analyse la chaîne que j'attribue à la propriété innerHTML de l'élément DOM au format HTML.
C'est génial et une grande vulnérabilité de sécurité :)
(recherchez XSS si vous voulez en savoir plus sur la sécurité)
la source
innerText est à peu près ce que vous obtiendriez si vous sélectionnez le texte et le copiez. Les éléments qui ne sont pas rendus ne sont pas présents dans innerText.
textContent est une concaténation des valeurs de tous les TextNodes du sous-arbre. Que ce soit rendu ou non.
Voici un excellent article détaillant les différences
innerHTML ne doit pas être inclus dans une comparaison avec innerText ou textContent, car il est totalement différent, et vous devriez vraiment savoir pourquoi :-) Recherchez-le séparément
la source
[Remarque: ce message concerne davantage le partage de données spécifiques susceptibles d'aider quelqu'un que de dire aux gens quoi faire]
Au cas où quelqu'un se demande ce qui est le plus rapide aujourd'hui: https://jsperf.com/set-innertext-vs-innerhtml-vs-textcontent & https://jsperf.com/get-innertext-vs-innerhtml-vs-textcontent ( pour le deuxième test, le contenu du span est en texte brut, les résultats peuvent changer en fonction de son contenu)
Il semble que ce
.innerHtml
soit le grand gagnant en termes de vitesse pure!(REMARQUE: je ne parle que de vitesse ici, vous voudrez peut-être rechercher d'autres critères avant de choisir celui à utiliser!)
la source
Element.innerHTML
set
, ouget
le code HTML de l'élément.Ex: Nous avons une
<h1>
étiquette et un style fort avec:<h1 id="myHeader" style="color: green"><strong>My Header</strong> Normal Text</h1>
Pour que leget
contenu de l'élément ait un id égal à "myHeader", nous ferons de même:Résultat de retour:
Pour "définir" un nouveau contenu (valeur) pour cet élément, le code sera ici:
Ainsi, cette propriété fonctionne non seulement avec du texte brut, mais elle vise à transmettre ou à copier du code HTML.
=> Nous ne devons pas l'utiliser.
Cependant, de nombreux programmeurs (y compris moi-même) utilisent cet attribut pour insérer du texte dans une page Web, et cette méthode comporte un risque potentiel:
Pour cette raison, l'utilisation
innerHTML
n'est pas recommandée lors de l'insertion de texte brut, utilisez plutôttextContent
. LatextContent
propriété ne comprendra pas que le code que vous passez est une syntaxe HTML, mais juste un texte à 100% ni plus ni moins.Le résultat retourne si vous utilisez
textContent
dans l'exemple ci-dessus:la source