body标签未定义或为空

时间:2012-09-30 14:05:09

标签: javascript html dom getelementsbytagname

你知道为什么我的身体标签/元素在我尝试使用时仍然是空的吗?我有以下代码:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"  "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
<title>Max</title>
<link rel="stylesheet" type="text/css" href="css/style.css"/>
<script>
alert(document.getElementsByTagName("*"));
function se(){
  var twenty = document.getElementsByTagName("*")[20];
 //twenty.children[1].children[0].children[1].innerHTML = "hiephoi";
}
se();

var fg = document.getElementsByTagName("body")[0];//undefined
</script>
</head>
<body>
<script>
alert(document.getElementsByTagName("*"));
function se(){
  var twenty = document.getElementsByTagName("*")[20];
  //twenty.children[1].children[0].children[1].innerHTML = "hiephoi";
}
se();</script>
:
:
:

如果我调试它,document.getElementsByTagName("*")确实给出断点处的元素列表,但是,当我要求

时,让代码运行会出错
document.getElementsByTagName("*")[20].children[1].children[0].children[1].innerHTML = "hiephoi";

它说document.getElementsByTagName("*")[20].children不是对象,实际上它是未定义的。您可能想知道为什么我会使用通配符,但只是查找任何特定标记都不会返回任何内容。奇怪的是,通配符确实返回了一个节点列表。 我可以试试JQuery,但我想了解这一点。 我在想它可能与文档的加载阶段有关? 或者可能是html在某个地方包含一个缺失的标签而且JS混淆了吗?

1 个答案:

答案 0 :(得分:1)

您正在尝试在创建DOM树之前获取元素。将你的javascript放在最后,在结束体标记之前,看看是否有效(未经过测试。出于同样的原因,它仍然可能不同)。

更好的是,在尝试从中读取之前,请查看window.onload以确保DOM已加载。 window.onload vs <body onload=""/>