getElementsByTagName只获得顶级标签?

Xah*_*Lee 2 javascript

我有这个真正令人讨厌的问题.

总之,如果我使用,我会得到一个未找到的元素 (document.getElementsByTagName("p"))[0]

如果p标签在div这里面

<div id="main">
<p>see</p>
</div>
Run Code Online (Sandbox Code Playgroud)

但是一旦我删除了div包装器,所有的东西都能正常工作.

30分钟后,我把问题简化为这个简单的代码:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>ttttttttttttttttttttt</title>
</head>
<body>

<div id="main">
<p>see</p>
</div>

<script type="text/javascript">
var myobj = document.createElement("div");
myobj.innerHTML='yesyes';

document.body.insertBefore(myobj, (document.getElementsByTagName("p"))[0] );
</script>

</body>
</html>
Run Code Online (Sandbox Code Playgroud)

把上面放在一个文件中.在Firefox或Chrome或IE8中打开.如果成功,你应该看到"是的".如果你删除<div id="main">包装,那么它的工作原理.

似乎有些东西我不理解getElementsByTagName

Hem*_*ock 5

与此无关getElementsByTagName,与此无关insertBefore.试试这个:

document.getElementById('main').insertBefore(myobj, (document.getElementsByTagName("p"))[0] );??
Run Code Online (Sandbox Code Playgroud)

insertBefore需要父元素.它不会像你调用它那样起作用(on body),所以我只是查找了"main"div.

  • 另一种可能性是`var p = document.getElementsByTagName("p")[0]; p.parentNode.insertBefore(myObj,p);` (2认同)