Aqui está o meu breve documento HTML.
Por que o Console do Chrome está notando este erro:
"TypeError não capturado: não é possível chamar o método 'appendChild' of
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
fonte
fonte
Respostas:
O corpo ainda não foi definido neste momento. Em geral, você deseja criar todos os elementos antes de executar o javascript que usa esses elementos. Nesse caso, você tem algum javascript na
head
seção que usabody
. Não é legal.Você deseja agrupar esse código em um
window.onload
manipulador ou colocá-lo após a<body>
tag (conforme mencionado no e-bacho 2.0 ).Veja a demonstração .
fonte
head
seção que está sendo executada. Masbody
parte do html, talvez, ainda nem tenha sido baixada. Ou é baixado, mas ainda não foi avaliado neste momento. Portanto, ele não existe no DOM.<body>
tag"Seu script está sendo executado antes do
body
elemento seja carregado.Existem algumas maneiras de solucionar isso.
Agrupe seu código em um retorno de chamada do DOM Load:
Agrupe sua lógica em um ouvinte de evento para
DOMContentLoaded
.Ao fazer isso, o retorno de chamada será executado quando o
body
elemento for carregado.Dependendo das suas necessidades, você pode anexar alternativamente um
load
ouvinte de evento aowindow
objeto:Para a diferença entre the
DOMContentLoaded
eload
events, consulte esta pergunta .Mova a posição do seu
<script>
elemento e carregue o último JavaScript:No momento, seu
<script>
elemento está sendo carregado no<head>
elemento do seu documento. Isso significa que ele será executado antes dobody
carregamento. Os desenvolvedores do Google recomendam mover as<script>
tags para o final da sua página, para que todo o conteúdo HTML seja renderizado antes do processamento do JavaScript.fonte
Adicione seu código ao evento onload. A resposta aceita mostra isso corretamente, no entanto, essa resposta e todas as outras no momento da redação também sugerem colocar a tag de script após a tag de fechamento do corpo,.
Este não é um html válido. No entanto, seu código funcionará, porque os navegadores são muito gentis;)
Veja esta resposta para obter mais informações. É errado colocar a tag <script> após a tag </body>?
Votou outras respostas por esse motivo.
fonte
Ou adicione esta parte
após o HTML, como:
fonte
O navegador analisa seu html de cima para baixo, seu script é executado antes do corpo ser carregado. Para corrigir colocar script após o corpo.
fonte
document.body
ainda não está disponível quando seu código é executado.O que você pode fazer:
fonte