<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>
</head>
<body>
<ul id="con">
<li id="lesson1">javascript
<ul>
<li id="tcon"> 基础语法</li>
<li>流程控制语句</li>
<li>函数</li>
<li>事件</li>
<li>DOM</li>
</ul>
</li>
<li id="lesson2">das</li>
<li id="lesson3">dadf</li>
<li id="lesson4">HTML/CSS
<ul>
<li>文字</li>
<li>段落</li>
<li>表单</li>
<li>表格</li>
</ul>
</li></ul>
<script type="text/javascript">
/*var mylist = document.getElementById("tcon");
document.write(mylist.parentNode.parentNode.parentNode.lastChild.innerHTML)*/
var x = document.getElementsByTagName("li");
document.write(x.length)
for(i=0;i<x.length;i++)
{document.write("*"+x[i].innerHTML+"*"+"<br/>"+"<br/>")}
</script>
</body>
</html>确实是输出了22次,因为这个x的长度,竟然在执行的过程中会变,可能是在循环中往页面写入时,上面的那个会动态去重新抓取,我也不太确定,确实没见过这种情况。不过换一种写法就好了,就是13个,就是先循环,然后只执行一次写入。
<script type="text/javascript">
var x = document.getElementsByTagName("li");
var str = '';
for (i = 0; i < x.length; i++) {
str+="*" + x[i].innerHTML + "*</br>";
}
document.write(str);
</script>我用* 和 * 隔开每次的输出 ,共输出了22对 ** 就证明 应该是输出了22次 为什么呢
因为你输出的是 li里面的内容 x[i].innerHTML 可以你有几个li里面 还包含了UL 这个 ul 里又包含了li 所以在这一个li里输出的东西就不是只有一行字了,就会比较多。其实还是只输出了13次。你用断点调一下就知道了。