`. Mais, comme nous pouvons le voir dans la ligne `(**)`, la valeur de l'ancienne variable `div` n'a pas changé !
L'affectation `outerHTML` ne modifie pas l'élément DOM (l'objet référencé, dans ce cas, la variable 'div'), mais le supprime du DOM et insère le nouveau HTML à sa place.
Donc, ce qui s'est passé dans `div.outerHTML=...` est :
- `div` a été supprimé du document.
- Un autre morceau du HTML `
A new element
` a été inséré à sa place.
- `div` a toujours son ancienne valeur. Le nouveau HTML n'a été enregistré dans aucune variable.
Il est si facile de faire une erreur ici : modifiez `div.outerHTML` puis continuez à travailler avec `div` comme s'il contenait le nouveau contenu. Mais ce n'est pas le cas. Ce genre de chose est correcte pour `innerHTML`, mais pas pour `outerHTML`.
Nous pouvons écrire dans `elem.outerHTML`, mais nous devons garder à l'esprit que cela ne change pas l'élément dans lequel nous écrivons ('elem'). Il place le nouveau HTML à sa place. Nous pouvons obtenir des références aux nouveaux éléments en interrogeant le DOM.
## nodeValue/data : contenu du nœud texte
La propriété `innerHTML` n'est valide que pour les nœuds élément.
D'autres types de nœuds, tels que les nœuds texte, ont leur contrepartie : les propriétés `nodeValue` et `data`. Ces deux sont presque les mêmes pour une utilisation pratique, il n'y a que des différences de spécifications mineures. Nous allons donc utiliser `data`, car il est plus court.
Un exemple de lecture du contenu d'un nœud texte et d'un commentaire :
```html run height="50"
Hello
```
Pour les nœuds texte, nous pouvons imaginer une raison de les lire ou de les modifier, mais pourquoi des commentaires ?
Parfois, les développeurs incorporent des informations ou des instructions de modèle dans HTML, comme ceci :
```html
Welcome, Admin!
```
...Ensuite, JavaScript peut le lire à partir de la propriété `data` et traiter les instructions intégrées.
## textContent: texte pur
Le `textContent` donne accès au *texte* à l'intérieur de l'élément : seulement le texte, moins tous les `
`.
Par exemple :
```html run
Headline!
Martians attack people!
```
Comme nous pouvons le voir, seul le texte est renvoyé, comme si tous les `` étaient supprimés, mais le texte qu'ils contenaient est resté.
En pratique, la lecture d'un tel texte est rarement nécessaire.
**Ecrire dans `textContent` est beaucoup plus utile, car il permet d'écrire du texte de "manière sûre".**
Disons que nous avons une chaîne de caractères arbitraire, par exemple entrée par un utilisateur, et que nous voulons l'afficher.
- Avec `innerHTML` nous allons l'insérer "au format HTML", avec toutes les balises HTML.
- Avec `textContent` nous allons l'insérer "en tant que texte", tous les symboles sont traités littéralement.
Comparez les deux :
```html run
```
1. La première `` obtient le nom "en HTML" : toutes les balises deviennent des balises, nous voyons donc le nom en gras.
2. La seconde `
` obtient le nom "sous forme de texte", donc nous voyons littéralement `
Winnie-the-pooh!`.
Dans la plupart des cas, nous attendons le texte d'un utilisateur et souhaitons le traiter comme du texte. Nous ne voulons pas de HTML inattendu sur notre site. Une affectation à `textContent` fait exactement cela.
## La propriété "cachée"
L'attribut "hidden" (caché) et la propriété DOM spécifient si l'élément est visible ou non.
Nous pouvons l'utiliser dans le HTML ou l'attribuer en utilisant JavaScript, comme ceci :
```html run height="80"
Both divs below are hidden
With the attribute "hidden"
JavaScript assigned the property "hidden"
```
Techniquement, `hidden` fonctionne de la même manière que `style="display:none"`. Mais c'est plus court à écrire.
Voici un élément clignotant :
```html run height=50
A blinking element
```
## Plus de propriétés
Les éléments DOM ont également des propriétés supplémentaires, en particulier celles qui dépendent de la classe :
- `value` -- la valeur pour `
`, `