<!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次。你用断点调一下就知道了。