getElementById()函数未在javascript中返回预期值

时间:2018-01-19 16:26:04

标签: javascript html function

为什么javascript程序会返回null?它应该返回objectHTMLunknwonelement

<html>
<head>
</head>
<body>
<script type="text/javascript">
function mySignature()
{
document.write("samir imtiaz<br/>");
document.write("www.fb.com/samir.imtiaz37");
var k=document.getElementById("para2");
alert(k);
}
<script>
mySignature();
</script>
<h2> it is head 2</h2>
<p id="para1" onmousemove="effect()" onmouseout="effectback()">
this is my first paragraph
</p>
<p1 id="para2">it is paragraph </p1>
<button onclick="mySignature()"> my sign </button>
</body>
</html>

点击时的预期输出&#34;我的标志&#34; button:objectHTMLunknwonelement

我观察到的输出:null

<html>
<head>
</head>
<body>
<script type="text/javascript">
function mySignature()
{
var k=document.getElementById("para2");
alert(k);
}
<script>
mySignature();
</script>
<h2> it is head 2</h2>
<p id="para1" onmousemove="effect()" onmouseout="effectback()">
  this is my first paragraph
</p>
<p1 id="para2">it is paragraph </p1>
<button onclick="mySignature()"> my sign </button>
</body>
</html>

点击时的预期输出&#34;我的标志&#34; button:objectHTMLunknwonelement

我观察到的输出:objectHTMlunknownelement

2 个答案:

答案 0 :(得分:1)

document.write()的

  

注意:当document.write写入文档流时,在已关闭(加载)的文档上调用document.write会自动调用document.open,这将清除文档。

在调用document.getElementById之前,您正在替换文档DOM,因此,元素para2不存在。

function mySignature() {
  var k = document.getElementById("para2");
  alert(k);
  
  document.write("samir imtiaz<br/>");
  document.write("www.fb.com/samir.imtiaz37");
  
}
<h2> it is head 2</h2>
<p id="para1">
this is my first paragraph
</p>
<p1 id="para2">it is paragraph </p1>
<button onclick="mySignature()"> my sign </button>

答案 1 :(得分:0)

第一次警报显示null,因为代码运行时该元素不存在。它在元素创建之前运行。加载页面并单击按钮后,每个示例案例的行为为:

在第一个示例中,方法中的document.write(..行正在用您正在编写的元素替换dom,因此&#34; p1&#34;元素被覆盖,因此getElementById返回null。注意警告后段落如何消失。

在第二个示例中,对象未被覆盖,但它是未知的标记类型,因此您预期的输出是预期的。