11484 sujets

JavaScript, DOM et API Web HTML5

innerHTML est sensé comprendre la mécanique des tags imbriqués, non ?
Alors pourquoi :
<p id="a"><p>b</p></p>

devient
<p id="a"></p><p>b</p><p></p>

dans :
myCode.innerHTML = '<p id="a"><p>b</p></p>';


Voici le codepen.
Et en voici un résumé :
<code></code>
<script>
document.querySelector('code').innerHTML = '<p id="a"><p>b</p></p>';
// result : <p id="a"></p><p>b</p><p></p>
</script>

Modifié par Gill (02 Dec 2019 - 12:18)
Quand un navigateur rencontre un <p> alors qu’il y en a déjà un ouvert, il ferme le précédent, car il est pas possible d’avoir un <p> dans un <p>. De même s’il rencontre un </p> alors qu’il n’y a pas de <p> ouvert, il en ajoute un.
Modifié par PapyJP (02 Dec 2019 - 17:42)
Meilleure solution
En effet ! C'est tout bête... Smiley confused Merci !

Bizarre... Autant je comprenais que certaines balises pouvaient être spécialisées ( <li>, par ex), autant j'étais persuadé que <p> n'était qu'une balise sémantique générique, comme <div><section><article><footer>, etc...

J'ai aussi été abusé par le fait que <p contentEditable="true"> insère lui-même des <p>, lorsqu'on tape [Entrée]...
...dans le cas particulier de mon programme Smiley sweatdrop (par défaut, dans un <p>, ce sont des <div>)
à cause de :
document.execCommand("defaultParagraphSeparator", false, 'p');

Modifié par Gill (02 Dec 2019 - 14:41)
JENCAL a écrit :
c'est véritablement une balise inutile Smiley smile

Disons qu’on peut effectivement s’en passer, mais si c’est pour la remplacer par <div class="paragraph"> ...
En fait c’est comme les <hi> et plein d’autres balises historiques, elles sont là comme parties de l’héritage et on continue à les utiliser par habitude.
Modifié par PapyJP (02 Dec 2019 - 17:41)