问答详情
源自:9-10 访问父节点parentNode

为什么输出的长度是13,但是把内容输出时,却多了好多?

<!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>


提问者:王师1984 2015-12-05 23:49

个回答

  • 李晓健
    2015-12-07 09:28:05
    已采纳

    确实是输出了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>


  • 王师1984
    2015-12-06 21:34:20

    我用* 和 *  隔开每次的输出 ,共输出了22对 ** 就证明  应该是输出了22次  为什么呢


  • 李晓健
    2015-12-06 10:04:18

    因为你输出的是 li里面的内容  x[i].innerHTML   可以你有几个li里面 还包含了UL  这个 ul 里又包含了li   所以在这一个li里输出的东西就不是只有一行字了,就会比较多。其实还是只输出了13次。你用断点调一下就知道了。