Penchons-nous maintenant sur deux propriétés analogues à innerHTML : innerText pour Internet Explorer et textContent pour les autres navigateurs.
La propriété innerText a aussi été introduite dans Internet Explorer, mais à la différence de sa propriété sœur innerHTML, elle n'a jamais été standardisée et n'est pas supportée par tous les navigateurs. Internet Explorer (pour toute version antérieure à la neuvième) ne supporte que cette propriété et non pas la version standardisée que nous verrons par la suite.
Le fonctionnement d'innerText est le même qu'innerHTML excepté le fait que seul le texte est récupéré, et non les balises. C'est pratique pour récupérer du contenu sans le balisage, petit exemple :
<body> <div id="myDiv"> <p>Un peu de texte <a>et un lien</a></p> </div>
<script> var div = document.getElementById('myDiv');
alert(div.innerText); </script> </body> |
Ce qui nous donne bien « Un peu de texte et un lien », sans les balises :
Le texte est affiché sans les balises HTML
La propriété textContent est la version standardisée d'innerText ; elle est reconnue par tous les navigateurs à l'exception d'Internet Explorer, bien que la version 9 la prenne aussi en charge. Le fonctionnement est évidemment le même. Maintenant une question se pose : comment faire un script qui fonctionne à la fois pour Internet Explorer et les autres navigateurs ? C'est ce que nous allons voir !
Il est possible via une simple condition de tester si le navigateur prend en charge telle ou telle méthode ou propriété.
<body> <div id="myDiv"> <p>Un peu de texte <a>et un lien</a></p> </div>
<script> var div = document.getElementById('myDiv'); var txt = '';
if (div.textContent) { // « textContent » existe ? Alors on s'en sert ! txt = div.textContent; } else if(div.innerText) { // « innerText » existe ? Alors on doit être sous IE. txt = div.innerText + ' [via Internet Explorer]'; } else { // Si aucun des deux n'existe, cela est sûrement dû au fait qu'il n'y a pas de texte txt = ''; // On met une chaîne de caractères vide }
alert(txt); </script> </body> |
Il suffit donc de tester par le biais d'une condition si l'instruction fonctionne. Si textContent ne fonctionne pas, pas de soucis, on prend innerText :
La fenêtre s'affiche avec Internet Explorer
Cela dit, ce code est quand même très long et redondant. Il est possible de le raccourcir de manière considérable :
txt = div.textContent || div.innerText || ''; |
Créé avec HelpNDoc Personal Edition: Créer des sites web d'aide facilement