Informatique


Le contenu des balises

Aller à

Rappel

L’objet Element va bien évidemment hériter de toutes les méthodes et propriétés de son parent Document, et va également posséder des méthodes et des propriétés qui lui sont propres.

Notez qu’on va toujours utiliser les propriétés et méthodes de l’objet Document sur Document lui même.
Ainsi, on écrira document.getElementByid() pour accéder à un élément HTML dans une page.

En revanche, on va appliquer les propriétés et méthodes de l’objet Element sur des objets de type Element, c’est-à-dire sur les éléments HTML sur lesquels on travaille en particulier.

On n’écrira donc pas element.innerHTML ; on appliquera innerHTML sur un élément en particulier ou plus exactement sur l’objet représentant l’élément (auquel on accèdera grâce aux méthodes de l’objet Document).

Cela est logique et intuitif lorsqu’on y pense : on ne travaille jamais que sur un document à la fois, il n’y a donc pas d’ambiguïté par rapport à l’objet Document. En revanche, lorsqu’on utilise innerHTML par exemple, on cherche à accéder au texte contenu dans un élément en particulier. Il faut donc cibler précisément cet élément avant.


Accéder au contenu d'une balise avec innerHTML

Cette méthode s'applique sur un objet Element et renvoie l'intégralité du contenu de l'élément recherché, y compris le code html éventuellement présent.

Démo
	<!doctype html>
	<html>

	<head>
		<meta charset="utf-8">
		<title>Mon beau site web</title>
	</head>

	<body>
		<h1 id=maintitre>Un beau contenu</h1>
		<p>Je vous présente mon site.</p>
		<p class=a1>Et allez donc aussi sur ce site: <a href="http://www.louisvandevelde.be">Louis vandevelde</a>.</p>
		<p class=c1>Super ce site.</p>
		<p class=c1>Et vous n'avez pas tout vu!</p>
		<p class=c1>Hop hop hop!</p>

	</body>

	</html>
	<script>
		let para=document.querySelector('.a1').innerHTML;
		alert(para);
	</script>
Premier cas

Si la méthode qui accède à l'élément ne renvoie qu'un élémént on peut directement appliquer la propriété innerHTML.

Démo
	<!doctype html>
	<html>

	<head>
		<meta charset="utf-8">
		<title>Mon beau site web</title>
	</head>

	<body>
		<h1 id=maintitre>Un beau contenu</h1>
		<p>Je vous présente mon site.</p>
		<p>Et allez donc aussi sur ce site: <a href="http://www.louisvandevelde.be">Louis vandevelde</a>.</p>
		<p class=c1>Super ce site.</p>
		<p class=c1>Et vous n'avez pas tout vu!</p>
		<p class=c1>Hop hop hop!</p>

	</body>

	</html>
	<script>
		let para=document.getElementById('maintitre').innerHTML;
		alert(para);
	</script>
Deuxième cas

Si la méthode qui accède aux éléments renvoie est susceptible de renvoyer plus qu'un élément on ne peut pas directement appliquer la propriété innerHTML.
Pourquoi? Car dans ce cas la propriété est associée à la collection d'éléments et non à un seul élément, ce qui renverra inévitablement undefined.

Démo
	<!doctype html>
	<html>

	<head>
		<meta charset="utf-8">
		<title>Mon beau site web</title>
	</head>

	<body>
		<h1 id=maintitre>Un beau contenu</h1>
		<p>Je vous présente mon site.</p>
		<p>Et allez donc aussi sur ce site: <a href="http://www.louisvandevelde.be">Louis vandevelde</a>.</p>
		<p class=c1>Super ce site.</p>
		<p class=c1>Et vous n'avez pas tout vu!</p>
		<p class=c1>Hop hop hop!</p>

	</body>

	</html>
	<script>
		//let para=document.querySelectorAll('.c1').innerHTML; //rencerra undefined
		let para=document.querySelectorAll('.c1');
		alert(para);
		for(let i=0;i<para.length;i++){
			document.write(para[i].innerHTML);
		}
	</script>

ATTENTION: dans le code précédent on aurait pu être tenté d'écrire: let para=document.querySelectorAll('.c1').innerHTML; mais cela ne fonctionne pas.
En effet il faut appliquer la propriété innerHTML à chaque item du tableau de l'objet Element para.


Accéder au contenu d'une balise avec textContent

Cette méthode s'applique sur un objet Element et renvoie uniquement le contenu textuel de l'élément recherché.

Démo
	<!doctype html>
	<html>

	<head>
		<meta charset="utf-8">
		<title>Mon beau site web</title>
	</head>

	<body>
		<h1 id=maintitre>Un beau contenu</h1>
		<p>Je vous présente mon site.</p>
		<p class=a1>Et allez donc aussi sur ce site: <a href="http://www.louisvandevelde.be">Louis vandevelde</a>.</p>
		<p class=c1>Super ce site.</p>
		<p class=c1>Et vous n'avez pas tout vu!</p>
		<p class=c1>Hop hop hop!</p>

	</body>

	</html>
	<script>
		let para=document.querySelector('.a1').textContent;
		alert(para);
	</script>

Cette propriété s'utilise comme innerHTML, les même remarques s'y rapportent également.


Modifier le contenu d'une balise avec innerHTML

Outre la possibilité de récupérer l'intégralité du contenu de l'élément recherché, cette méthode permet également de modifier le contenu d'une balise html.

Démo
	<!doctype html>
	<html>

	<head>
		<meta charset="utf-8">
		<title>Mon beau site web</title>
	</head>

	<body>
		<h1 id=maintitre>Un beau contenu</h1>
		<p>Je vous présente mon site.</p>
		<p class=a1>Et allez donc aussi sur ce site: <a href="http://www.louisvandevelde.be">Louis vandevelde</a>.</p>
		<p class=c1>Super ce site.</p>
		<p class=c1>Et vous n'avez pas tout vu!</p>
		<p class=c1>Hop hop hop!</p>

	</body>

	</html>
	<script>
		let para=document.querySelector('.a1');
		para.innerHTML="Coucou, mon nouveau contenu";
		//para.textContent="Coucou, mon nouveau contenu";
	</script>

Modifier le contenu d'une balise textContent

Outre la possibilité de récupérer le contenu textuel de l'élément recherché, cette méthode permet également de modifier le contenu d'une balise html.

Démo
	<!doctype html>
	<html>

	<head>
		<meta charset="utf-8">
		<title>Mon beau site web</title>
	</head>

	<body>
		<h1 id=maintitre>Un beau contenu</h1>
		<p>Je vous présente mon site.</p>
		<p class=a1>Et allez donc aussi sur ce site: <a href="http://www.louisvandevelde.be">Louis vandevelde</a>.</p>
		<p class=c1>Super ce site.</p>
		<p class=c1>Et vous n'avez pas tout vu!</p>
		<p class=c1>Hop hop hop!</p>

	</body>

	</html>
	<script>
		let para=document.querySelectorAll('.c1');
		for(let i=0;i<para.length;i++){
			//para[i].innerHTML="Coucou, mon nouveau contenu "+i;
			para[i].textContent="Coucou, mon nouveau contenu "+i;
		}
	</script>