Aquí está mi breve documento HTML.
¿Por qué la consola Chrome está notando este error?
"Tipo de error no detectado: ¿No se puede llamar al método 'appendChild' de
null"?
<html>
<head>
<title>Javascript Tests</title>
<script type="text/javascript">
var mySpan = document.createElement("span");
mySpan.innerHTML = "This is my span!";
mySpan.style.color = "red";
document.body.appendChild(mySpan);
alert("Why does the span change after this alert? Not before?");
</script>
</head>
<body>
</body>
</html>
javascript
google-chrome
John Hoffman
fuente
fuente

Respuestas:
El cuerpo aún no se ha definido en este punto. En general, desea crear todos los elementos antes de ejecutar javascript que usa estos elementos. En este caso tienes algunos javascript en la
headsección que usabody. No es genialDesea envolver este código en un
window.onloadcontrolador o colocarlo después de la<body>etiqueta (como se menciona en e-bacho 2.0 ).Ver demo .
fuente
headsección que se está ejecutando. Perobodyparte del html, tal vez, aún no se ha descargado. O se descarga, pero todavía no se evalúa en este momento. Por lo tanto, no existe en el DOM.<body>etiqueta"Su script se está ejecutando
bodyincluso antes de que el elemento se haya cargado.Hay un par de formas de solucionar esto.
Envuelva su código en una devolución de llamada de carga DOM:
Envuelva su lógica en un oyente de eventos
DOMContentLoaded.Al hacerlo, la devolución de llamada se ejecutará cuando el
bodyelemento se haya cargado.Dependiendo de sus necesidades, también puede adjuntar un
loaddetector de eventos alwindowobjeto:Para la diferencia entre los eventos
DOMContentLoadedyload, vea esta pregunta .Mueva la posición de su
<script>elemento y cargue JavaScript al final:En este momento, su
<script>elemento se está cargando en el<head>elemento de su documento. Esto significa que se ejecutará antes de que sebodyhaya cargado. Los desarrolladores de Google recomiendan mover las<script>etiquetas al final de su página para que todo el contenido HTML se procese antes de que se procese JavaScript.fuente
Agregue su código al evento de carga. La respuesta aceptada muestra esto correctamente, sin embargo, esa respuesta, así como todas las demás al momento de escribir, también sugieren colocar la etiqueta del script después de la etiqueta del cuerpo de cierre,.
Esto no es html válido. Sin embargo, hará que su código funcione, porque los navegadores son demasiado amables;)
Consulte esta respuesta para obtener más información. ¿Es incorrecto colocar la etiqueta <script> después de la etiqueta </body>?
Votó otras respuestas por este motivo.
fuente
O agrega esta parte
después del HTML, como:
fuente
El navegador analiza su html de arriba hacia abajo, su script se ejecuta antes de cargar el cuerpo. Para arreglar poner script después del cuerpo.
fuente
document.bodyaún no está disponible cuando se ejecuta su código.Lo que puedes hacer en su lugar:
fuente