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
head
sección que usabody
. No es genialDesea envolver este código en un
window.onload
controlador o colocarlo después de la<body>
etiqueta (como se menciona en e-bacho 2.0 ).Ver demo .
fuente
head
sección que se está ejecutando. Perobody
parte 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
body
incluso 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
body
elemento se haya cargado.Dependiendo de sus necesidades, también puede adjuntar un
load
detector de eventos alwindow
objeto:Para la diferencia entre los eventos
DOMContentLoaded
yload
, 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 sebody
haya 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.body
aún no está disponible cuando se ejecuta su código.Lo que puedes hacer en su lugar:
fuente