¿Por qué newline after pre tag desaparece?

¿Por qué una nueva línea inmediatamente después de una label <pre> no aparece en el DOM?

<html> <body> <div id="mydiv"> hello div world </div> <pre id="mypre"> hello pre world </pre> <script> alert("div content: "+document.getElementById("mydiv").innerHTML) alert("pre content: "+document.getElementById("mypre").innerHTML) </script> </body> </html> 

Muestra que, a diferencia del salto de línea después de la label div, el salto de línea después de la label previa no parece estar en el dom. Además, el innerHTML de todo el cuerpo no muestra un salto de línea después de la label previa.

¿Hay alguna forma de averiguar en JS si el documento HTML original contiene un salto de línea después del <pre> o no?

Porque eso es lo que dice la especificación para hacer :

Nota : En la syntax HTML, se elimina un carácter de nueva línea que sigue inmediatamente a la label de inicio del elemento pre .

Entonces, si quieres esa nueva línea allí, de manera un tanto intuitiva, debes agregar una nueva: Ejemplo

 <pre id="mypre"> hello pre world </pre> 

Nota al margen: recomiendo siempre include un tipo de documento, incluso en ejemplos breves como el de su pregunta. Puede marcar la diferencia (aunque no creo que lo haga en este caso).

De la especificación de <pre> :

Nota En la syntax HTML, se elimina un carácter de nueva línea que sigue inmediatamente a la label de inicio del elemento pre .

Creo que esto se hace para que no tengas que escribir:

 <pre>Some text some more and more </pre> 

para evitar un salto de línea adicional al principio. Puedes escribir:

 <pre> Some text some more and more </pre> 

Esto es útil si está utilizando <pre> para alinear columnas, ya que el primer formatting no le permite alinear correctamente la primera línea.

Si desea una nueva línea adicional al comienzo de su text preformateado, ponga una línea en blanco después de la label:

 <pre id="mypre"> hello pre world </pre>