<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>
</head>
<body>
<ul id="test"><li>JavaScript</li><id ="a"li>HTML</li></ul>
<script type="text/javascript">
var otest = document.getElementById("test");
var j = document.getElementById("a");
var k=document.createElement("li");
k.innerHTML="php";
otest.insertBefore(k,j);
</script>
</body>
</html>
你的html里面id为"a"的<li>标签写错了,不应该是<id ="a"li>HTML</li>,应该是<li id ="a">HTML</li>,你那样的写法浏览器会解释错误,因此“HTML”会被当作一个普通的文本节点,而不是id为"a"的<li>标签中的文本节点,因此浏览器找不到j这个节点对象,所以会将新的节点k加在HTML的后面(即最后一个子节点的前面,而HTML后面还有</li>,所以不会被当作最后一个子节点)。