Au sein du <div id="output"> se trouve un texte comportant quelques éléments <br />. A l'aide d'un script, supprimez tous ces éléments <br /> pour que le texte forme un joli paragraphe sans retours à la ligne.
Écrivez le code qui permet de faire ça. Dès que c'est fait, cliquez sur le bouton Exécuter le script pour exécuter le code.
Écrivez votre code
Console d'erreurs
Pas d'erreurs d'exécution ou de syntaxe
Rendu #output
Source HTML
Bonjour à tous, je suis Zozor !
Je suis la mascotte officielle du Site du Zéro.
Je suis un âne, mais je suis capable de parler et d’apprendre.
Comme ça un jour, je gouvernerai le monde !
Solutions
Le for inversé
La solution n'est ici pas très évidente. La solution que je préfère est de faire une boucle for inversée (où l'on décrémente au lieu d'incrémenter). L'utilisation d'une boucle for incrémentée n'est pas possible, car en supprimant le premier élément <br />, le tableau d'éléments retourné par getElementsByTagName() est modifié, ce qui fait que l'itération suivante provoquera une erreur, car l'élément pointé par brs[i] n'existera plus. La solution consiste donc à parcourir le tableau à l'envers, et supprimer les éléments du dernier au premier :
var output = document.getElementById('output');
var brs = output.getElementsByTagName('br');
for (var i=brs.length; i>0; i--) {
brs[i - 1].parentNode.removeChild(brs[i - 1]);
}
La while
Une seconde solution serait, comme la précédente, de stocker la liste des <br />, mais d'utiliser une boucle while pour boucler tant que le nombre de <br> est différent de zéro. Car à chaque fois qu'un saut de ligne sera retiré, le nombre d'éléments répertoriées par la variable brs sera modifié en conséquence :
var output = document.getElementById('output');
var brs = output.getElementsByTagName('br');
while (brs.length !== 0){
brs[0].parentNode.removeChild(brs[0]);
}
Une sous-solution à la précédente serait de faire une boucle qui s'exécute tant que le premier <br /> existe. Je suis moins fan de cette technique, car elle implique de faire un getElementsByTagName() à chaque tour de boucle...
var output = document.getElementById('output'), br;
while (br = output.getElementsByTagName('br')[0]) {
br.parentNode.removeChild(br);
}
Un commentaire ? Un bug ? Contactez-moi !
Vous souhaitez proposer une autre solution ?
Un autre exercice ou une précision ?
Vous avez rencontré une erreur ?
Un exercice ne fonctionne pas ?
OpenClassrooms
Commentez directement dans le sujet dédié aux exercices