我正在尝试从JavaScript获取DOM元素。尽管ID是正确的,getElementId
似乎无法找到它;我得到了
Chrome中的TypeError:无法读取null
的属性'innerHTML'
或
在Firefox中只使用下面的简单代码TypeError:x为null
。这是为什么?
<!DOCTYPE html>
<html>
<head>
<script>
var x = document.getElementById("myHeader");
alert(x.innerHTML);
</script>
</head>
<body>
<h1 id="myHeader">Click me!</h1>
</body>
</html>
答案 0 :(得分:12)
由于<script>
标记位于<head>
标记内,因此它会在解析正文之前运行,因此myHeader
元素尚不存在。
您需要将<script>
块放在<body>
标记的末尾。
答案 1 :(得分:3)
或者将其保留在<head>
中,但将其包装在函数中并在加载<body>
时调用它
<!DOCTYPE HTML PUBLIC "-//W3C/DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/tdt/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script type="text/javascript">
<!--
function init(){
var x=document.getElementById("myHeader");
alert(x.innerHTML);
}
//-->
</script>
</head>
<body onload="init();">
<h1 id="myHeader">Click me!</h1>
</body>
</html>
答案 2 :(得分:2)
问题是,在您调用getElementById
函数时,DOM尚未完成加载,因此不存在元素myHeader
。您需要在DOM加载完成后执行此代码。例如:
window.onload = function() {
var x = document.getElementById("myHeader");
alert(x.innerHTML);
};
如果您使用流行的jQuery框架,您的代码可能如下所示:
$(function() {
var x = $("#myHeader");
alert(x.html());
});
它适用于大多数浏览器。
另一种选择是在关闭script
代码之前放置body
:
<h1 id="myHeader">Click me!</h1>
<script type="text/javascript">
<!--
var x=document.getElementById("myHeader");
alert(x.innerHTML);
//-->
</script>
</body>
当脚本开始执行后,DOM会按顺序加载,{}}元素已经加载。
答案 3 :(得分:1)
在这种情况下将脚本移动到底部,如下所示:
<!DOCTYPE HTML PUBLIC "-//W3C/DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/tdt/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
</head>
<body>
<h1 id="myHeader">Click me!</h1>
<script type="text/javascript">
<!--
var x=document.getElementById("myHeader");
alert(x.innerHTML);
//-->
</script>
</body>
</html>
目前,它正在元素存在之前执行 ,所以它是错误的,因为它没有找到任何内容,并且x
未定义。在正文末尾运行脚本将解决此问题。
答案 4 :(得分:0)
在加载HTML之前,您的脚本正在运行。将脚本移到底部或延迟执行,直到页面加载完毕。
此外,您永远不需要使用<!-- ... ---->
来隐藏您的脚本。
答案 5 :(得分:0)
您认为浏览器在点击标题后如何调用您的代码? 你需要将警报(某物)提取到一个函数中,例如
function hello(){
alert("hello world");
}
和h1元素添加 onClick =“hello()”属性。
答案 6 :(得分:0)
这不起作用,因为浏览器在看到它后会立即执行您的脚本, 之前您的h1
标记被解析并添加到DOM中。
您可以将<script>
标记放在yoru文档的末尾,但更好的方法是通过将警报放在窗口的onload
处理程序中来延迟执行。
如果您对使用jQuery这样的框架感兴趣,它会提供类似的ready
事件。